GENERATORI DI ANALIZZATORI SINTATTICI. Generatori di parser

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "GENERATORI DI ANALIZZATORI SINTATTICI. Generatori di parser"

Transcript

1 GENERATORI DI ANALIZZATORI SINTATTICI Generatori di parser Data una specifica sintassi (come uno grammatica context-free), il parser si occupa di leggere i token e di ragrupparli in strutture linguistiche. Il parser verifica la correttezza sintassi e può produrre un messaggio di errore. Quando viene ricosciuta una struttura sintattica il parser di solito costruisce un albero di sintattico (AST) che è una rappresentazione concisa della struttura del programma, che guida la trasformazione semantica. I Parser vengono in genere creati da una CFG usando un generatore di parser (come Yacc, Bison o Java CUP). 1

2 Yacc: Introduzione È un tool disponibile su Unix, ma non solo, e permette di generare dei parser. Quando si scrive un programma in Yacc si descrivono le produzioni della grammatica del linguaggio da riconoscere e le azioni da intraprendere per ogni produzione. Gestisce grammatiche LARL(1). Genera una funzione (parser) per riconoscere l input. Il parser usa l analizzatore lessicale per prelevare dall input i token e riorganizzarli in base alla produzioni della grammatica utilizzata. Quando una produzione viene riconosciuta viene eseguito il codice ad essa associata. Struttura di un Programma Yacc Ogni programma Yacc consta di tre sezioni: dichiarazioni, regole e programmi ed ha il seguente aspetto: Dichiarazioni %% Regole %% Sezione routines ausiliarie La sezione delle regole è l unica obbligatoria. I caratteri di spaziatura (blank, tab e newline) vengono ignorati. I commenti sono racchiusi, come in C, tra i simboli /* e */ 2

3 Yacc: Sezione Definizioni Nella sezione definizione si definiscono alcune informazioni globali da dover usare per interpretare la grammatica. Tramite l istruzione: ù %token1 token2 tokenn si definiscono quali sono i token inseriti nelle regole che sono il risultato dell analisi lessicale. Tramite l istruzione: % start assioma si definisce qualè il non terminale della grammatica da considerare come assioma (per default il primo non terminale incontrato). Sezione regole La sezione regole è composta da una o più produzioni espresse nella forma: A : BODY ; {Azione} dove A rappresenta un simbolo non terminale e body rappresenta una sequenza di uno più simboli sia terminali che non terminali. I simboli : e ;sono separatori. Nel caso la grammatica presenti più produzioni per lo stesso simbolo terminale, queste possono essere scritte senza ripetere il non terminale usando il simbolo 3

4 Yacc: Azioni Ad ogni regola può essere associata un azione che verrà eseguita ogni volta che la regola viene riconosciuta. Le azioni sono istruzioni C e sono raggruppate in un blocco. A : B C D {printf ( ciao ) Le azioni possono apparire ovunque nel body di una regola. Le azioni possono scambiare dei valori con il parser tramite delle pseudo-variabili introdotte dal simbolo ($$, $1, $2, ) A : B {$$ = 1} C {$1 = 2; $2 = 12} La pseudo-variabile $$ è associata al lato sinistro della produzione mentre le pseudo-variabili $n sono associate al non terminale di posizione n nella parte destra della produzione. Yacc: Analisi Lessicale Yacc si avvale si un analizzatore lessicale (yylex per leggere l input e convertirlo in token (più eventuali valori) da passare al parser. Un possibile analizzatore lessicale pu`o essere creato usando LeX. I token sono passati al parser sotto forma di interi. Quindi parser ed analizzatore lessicale devono accordarsi su quali valori rappresentano i token. L accordo viene preso in modo automatico da Yacc definendo i vari token tramite istruzioni C #define L analizzatore lessicale pu`o associare ai token un valore assegnandolo alla variabile predefinita yylval 4

5 Yacc: Parser Il parser generato da Yacc è un automa a stati finiti di tipo push-down in grado di avere un token di lookahead. L automa ha solo 4 azioni: shift, reduce, accept ed error. In base allo stato corrente (simbolo sul top dello stack) il parser decide se necessita di un token di lookahead (ottenibile usando yylex per decidere che azione intraprendere. Usando lo stato corrente ed il token di lookahead decide quale azione intraprende e la espleta. Azione di shift: usa sempre un token di lookahead, e consiste nel confrontare tale token con il token corrente ed in caso di match spilare lo stato dallo stack, inserire il nuovo stato e saltare il token di lookahead. Azione di reduce: evitano il crescere incontrollato dello stack, e sono usate quando il parser esamina il lato destro di una produzione e lo sostituisce con il lato sinistro della stessa. Può servire un token di lookahead. Azione di accept: l input appartiene al linguaggio descritto dalla grammatica. Azione di error: l input si `e rilevato non appartenente al linguaggio descritto dalla grammatica. Yacc: Ambiguità e Conflitti Le produzioni di una grammatica possono essere ambigue, come ad esempio: E : E + E infatti se in input si ha la stringa E + E + E possibile interpretarla sia come E + (E +E) che come (E +E) +E. Yacc è in grado di accorgersi di tale ambiguità. Il parser può applicare un azione di reduce alla parte di stringa E + E ottenendo E E e quindi riapplicare tale azione; oppure può applicare un azione di shift E + E e quando ha letto tutta la stringa applicare le due azioni di reduce a partire dalla seconda coppia E + E. Questo tipo di situazione è detta conflitto di tipo shift-reduce, in modo analogo è possibile avere anche conflitti di tipo reduce-reduce. 5

6 Nel caso Yacc rilevi un conflitto, produce lo stesso un parser effettuando delle scelte su quale azione intraprendere per prima. Le regole adottate per disambiguare tali conflitti sono: in un conflitto shift-reduce si da la precedenza all azione di shift; in un conflitto reduce-reduce si da la precedenza alla regola che viene incontrata per prima. E sempre bene evitare i conflitti alla base riscrivendo la grammatica. Un altromodo per risolvere i conflitti, o per lo meno per pilotarne la risoluzione è quello di definire l associatività dei simboli ambigui, tramite le istruzioni %rigth e %left da inserire nella sezione dichiarazioni. Esempio %rigth = %left + - %left * / Esempio 6

7 7

8 Java Cup Accetta specifiche di un CFG e produce un parser LALR (1) parser (implementato in Java) con le routine relative alle azioni espressa in Java Simile a yacc, ma con alcuni miglioramenti (gestione dei nome) Di solito usato con JLex (o JFlex) JavaCUP: Un generatore LALR per Java Definizione dei Tokens Espressioni Regolari JLex Grammatica BNF-like Specification JavaCUP Java File: Scanner Class Java File: Parser Class Riconoscimento dei Tokens Syntactic Analyzer Use lo Scanner per recuperare I Tokens Parses Stream of Tokens 8

9 Passi per utilizzare JavaCup Scivere una specifica JavaCup (cup file) Definisce la grammatica e le azioni in un file (e.g., calc.cup) Eseguire JavaCup per generare il parser java java_cup.main < calc.cup Nota il prefisso del package L input è lo standard in Generera un parser.java e sym.java (nome default della clase, ma puo essere modificato) Scrivere il programma che usa il parser As esempio, UseParser.java Compilare ed eseguire il programma Struttura della specifica Java Cup java_cup_spec ::= package_spec import_list code_part init_code scan_code symbol_list precedence_list start_spec production_list Cosa significa? Package_spec e import_list consente la gestione del naming Java Code e init_code permette l inserimento di codice nell output generato Scan code specifica come è invocato lo scanner (lexer) Symbol list e precedence list specificano I nomi dei temrinali e dei nonterminali e I nami e le loro precedence Start e production specifica la grammatica e l assioma 9

10 Specifica JavaCup (calc.cup) terminal PLUS, MINUS, TIMES, DIVIDE, LPAREN, RPAREN; terminal Integer NUMBER; non terminal Integer expr; precedence left PLUS, MINUS; precedence left TIMES, DIVIDE; expr ::= expr PLUS expr expr MINUS expr expr TIMES expr expr DIVIDE expr LPAREN expr RPAREN NUMBER ; È la grammatica ambigua? Come possiamo ottenere PLUS...? Sono i terminali restituiti dallo scanner. Come per connettersi con lo scanner? Ambiguous Grammar Error Se inseriamo la grammatica Expression ::= Expression PLUS Expression; Senza le precedenze JavaCUP segnalerà: Shift/Reduce conflict found in state #4 between Expression ::= Expression PLUS Expression. and Expression ::= Expression. PLUS Expression under symbol PLUS Resolved in favor of shifting. La grammatica è ambigua! Possiamo inserire in JavaCUP che PLUS è associativo a sinistra. 10

11 Specifica dello scanner corrispondente (calc.lex) import java_cup.runtime.*; %% %implements java_cup.runtime.scanner %type Symbol %function next_token %class CalcScanner %eofval{ return null; %eofval} NUMBER = [0-9]+ %% Connesione con il parser imports java_cup.runtime.*, Symbol, Scanner. implements Scanner next_token: definito in Scanner interface CalcSymbol, PLUS, MINUS,... new Integer(yytext()) "+" { return new Symbol(CalcSymbol.PLUS); } "-" { return new Symbol(CalcSymbol.MINUS); } "*" { return new Symbol(CalcSymbol.TIMES); } "/" { return new Symbol(CalcSymbol.DIVIDE); } {NUMBER} { return new Symbol(CalcSymbol.NUMBER, new Integer(yytext()));} \r\n {}. {} Run JLex java JLex.Main calc.lex Nota che il package prefix JLex Il programma generato calc.lex.java javac calc.lex.java La classe gnenerata: CalcScanner.class 11

12 Generated CalcScanner class 1. import java_cup.runtime.*; 2. class CalcScanner implements java_cup.runtime.scanner { public Symbol next_token () { case 3: { return new Symbol(CalcSymbol.MINUS); } 7. case 6: { return new Symbol(CalcSymbol.NUMBER, new Integer(yytext()));} } 10. } Interface Scanner è definita nel package java_cup.runtime public interface Scanner { public Symbol next_token() throws java.lang.exception; } Run javacup Eseguire javacup per generare il parser java java_cup.main -parser CalcParser -symbols CalcSymbol < calc.cup Le classi generate: CalcParser; CalcSymbol; Compilare il parser javac CalcParser.java CalcSymbol.java CalcParserUser.java Usare il parser java CalcParserUser 12

13 The token class Symbol.java 1. public class Symbol { 2. public int sym, left, right; 3. public Object value; 4. public Symbol(int id, int l, int r, Object o) { 5. this(id); left = l; right = r; value = o; 6. } public Symbol(int id, Object o) { this(id, -1, -1, o); } 9. public String tostring() { return "#"+sym; } 10. } Instance variables: sym: il tipo del simbolothe symbol type; Lef (rigrh): la posizione a sinistra (desttra) nel file di input value: il valore lessicale the lexical value. Le azioni nel file lex : return new Symbol(CalcSymbol.NUMBER, new Integer(yytext()));} CalcSymbol.java (default name is sym.java) 1. public class CalcSymbol { 2. public static final int MINUS = 3; 3. public static final int DIVIDE = 5; 4. public static final int NUMBER = 8; 5. public static final int EOF = 0; 6. public static final int PLUS = 2; 7. public static final int error = 1; 8. public static final int RPAREN = 7; 9. public static final int TIMES = 4; 10. public static final int LPAREN = 6; 11. } Contiene la dichiazione dei token declaration, ona per ogni token (terminale); E generata dalla lista dei terminali nel file cup terminal PLUS, MINUS, TIMES, DIVIDE, LPAREN, RPAREN; terminal Integer NUMBER è utilizzata dallo scanner per riferirsi ail tipo dei simboli (e.g., return new Symbol(CalcSymbol.PLUS);) Class name comes from symbols directive. java java_cup.main -parser CalcParser -symbols CalcSymbol calc.cup 13

14 The program that uses the CalcParser import java.io.*; class CalcParserUser { public static void main(string[] args){ try { File inputfile = new File ("calc.input"); CalcParser parser= new CalcParser(new CalcScanner(new FileInputStream(inputFile))); parser.parse(); } catch (Exception e) { e.printstacktrace(); } } } The program that uses the CalcParser l testo di input per essere analizzato può essere qualsiasi flusso di input (in questo esempio si tratta di un FileInputStream); Il primo passo è quello di costruire un oggetto parser. Un parser può essere costruito utilizzando uno scanner. Se non c'è alcuna segnalazione di errore, l'espressione nel file di input è corretto. } 14

15 Valutazione dell espressione La specifica precedente, indica solo il successo o il fallimento di un parser. Nessuna azione semantica è associata con le regole grammaticali. Per calcolare l'espressione, dobbiamo aggiungere il codice java nella grammatica di svolgere azioni in vari punti. Forma delle azioni semantiche: expr: e1 PLUS expr: e2 {: RESULT = new Integer (e1.intvalue () + e2.intvalue ());:} Azioni (codice Java) sono racchiusi all'interno di una coppia (::) Etichette E2, E2: gli oggetti che rappresentano il terminale o non terminale corrispondente; RESULT: Il tipo di risultato dovrebbe essere lo stesso del tipo di non-terminali corrispondenti. ad esempio, expr è di tipo Integer, così risultato è di tipo intege Modifiche di calc.cup terminal terminal Integer NUMBER; non terminal Integer expr; precedence left PLUS, MINUS; precedence left TIMES, DIVIDE; PLUS, MINUS, TIMES, DIVIDE, LPAREN, RPAREN; expr ::= expr:e1 PLUS expr:e2 {: RESULT = new Integer(e1.intValue()+ e2.intvalue()); :} expr:e1 MINUS expr:e2 {: RESULT = new Integer(e1.intValue()- e2.intvalue()); :} expr:e1 TIMES expr:e2 {: RESULT = new Integer(e1.intValue()* e2.intvalue()); :} expr:e1 DIVIDE expr:e2 {: RESULT = new Integer(e1.intValue()/ e2.intvalue()); :} LPAREN expr:e RPAREN {: RESULT = e; :} NUMBER:e {: RESULT= e; :} 15

16 Modifiche di CalcParserUser import java.io.*; class CalcParserUser { public static void main(string[] args){ try { File inputfile = new File ("calc.input"); CalcParser parser= new CalcParser(new CalcScanner(new FileInputStream(inputFile))); Integer result= (Integer)parser.parse().value; System.out.println("result is "+ result); } catch (Exception e) { e.printstacktrace(); } } } Perché il risultato di parser().value è un intero? Ciò è determinato dal tipo di expr, che è il capo della prim produzione nelle specifiche javacup: non terminal Integer expr; 16

Generatori di analizzatori sintattici

Generatori di analizzatori sintattici Generatori di analizzatori sintattici Generatori di parser Data una specifica sintassi (come uno grammatica context-free), il parser si occupa di leggere i token e li raggruppa in strutture linguistiche.

Dettagli

Data una specifica sintassi (come uno grammatica context-free), il parser si occupa di leggere i token e di ragrupparli in strutture linguistiche.

Data una specifica sintassi (come uno grammatica context-free), il parser si occupa di leggere i token e di ragrupparli in strutture linguistiche. Data una specifica sintassi (come uno grammatica context-free), il parser si occupa di leggere i token e di ragrupparli in strutture linguistiche. Il parser verifica la correttezza sintassi e può produrre

Dettagli

PARSER GENERATOR GENERATORI DI PARSER

PARSER GENERATOR GENERATORI DI PARSER PARSER GENERATOR GENERATORI DI PARSER Data una specifica sintassi (come uno grammatica contextfree), il parser si occupa di leggere i token e di ragrupparli in strutture linguistiche. Il parser verifica

Dettagli

Riconoscitori e analizzatori sintattici. Scanning e parsing. Funzionamento di un parser: la tecnica Shift/Reduce. Esempio

Riconoscitori e analizzatori sintattici. Scanning e parsing. Funzionamento di un parser: la tecnica Shift/Reduce. Esempio POLITECNICO I TORINO Laboratorio di Compilatori Corso di Linguaggi e Traduttori mail: stefano.scanzio@polito.it sito: Riconoscitori e analizzatori sintattici ata una grammatica non ambigua ed una sequenza

Dettagli

POLITECNICO DI TORINO. Laboratorio di Compilatori Corso di Linguaggi e Traduttori. Esercitazione 2. a.a 2010 / 2011

POLITECNICO DI TORINO. Laboratorio di Compilatori Corso di Linguaggi e Traduttori. Esercitazione 2. a.a 2010 / 2011 POLITECNICO DI TORINO Laboratorio di Compilatori Corso di mail: stefano.scanzio@polito.it sito: a.a 2010 / 2011 Riconoscitori e analizzatori sintattici Data una grammatica non ambigua ed una sequenza di

Dettagli

Esercitazioni di Linguaggi e Traduttori

Esercitazioni di Linguaggi e Traduttori 1 Linguaggi CF e Riconoscitori 2 Introduzione a Yacc Introduzione a YACC Definizione dei simboli Codifica della grammatica Formato del programma prodotto da YACC Ambiguità e conflitti Conflitti shift-reduce

Dettagli

Yet Another Compiler-Compiler. Generazione automatica di analizzatori sintattici

Yet Another Compiler-Compiler. Generazione automatica di analizzatori sintattici Yet Another Compiler-Compiler Generazione automatica di analizzatori sintattici 2 YACC Yet Another Compiler-Compiler YACC (Bison) è un generatore di analizzatori sintattici a partire dalla descrizione

Dettagli

Riconoscitori e analizzatori sintattici

Riconoscitori e analizzatori sintattici POLITECNICO DI TORINO Laboratorio di Compilatori Corso di Linguaggi e Traduttori Esercitazione 2 Marco Torchiano mail: marco.torchiano@polito.it sito: http://www.skenz.it/traduttori a.a 2008 / 2009 1 Riconoscitori

Dettagli

Scopo del progetto è la costruzione di un compilatore per il linguaggio descritto qui di seguito.

Scopo del progetto è la costruzione di un compilatore per il linguaggio descritto qui di seguito. Corso di Linguaggi e Traduttori Anno Accademico 2017 2018 Prof. Giovanni Pighizzini Progetto d esame Scopo del progetto è la costruzione di un compilatore per il linguaggio descritto qui di seguito. Variabili

Dettagli

Dispensa YACC. 1.1 YACC: generalità

Dispensa YACC. 1.1 YACC: generalità Dispensa YACC 1.1 YACC: generalità Il tool Yacc (acronimo per Yet Another Compiler Compiler) è uno strumento software che a partire da una specifica grammaticale context free di un linguaggio scritta in

Dettagli

POLITECNICO DI TORINO. Laboratorio di Compilatori Corso di Linguaggi e Traduttori. Esercitazione 3. a.a 2010 / Uso avanzato di Cup

POLITECNICO DI TORINO. Laboratorio di Compilatori Corso di Linguaggi e Traduttori. Esercitazione 3. a.a 2010 / Uso avanzato di Cup POLITCNICO DI TORINO Laboratorio di Compilatori Corso di mail: stefano.scanzio@polito.it sito: a.a 2010 / 2011 Uso avanzato di Cup Grammatiche ambigue Le liste Precedenze degli operatori Gestione degli

Dettagli

Analizzatore lessicale o scanner. Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser.

Analizzatore lessicale o scanner. Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser. Analizzatore lessicale o scanner Dispensa del corso di Linguaggi e Traduttori A.A. 2005-2006 Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser. Lo scanner,

Dettagli

ANALISI SINTATTICA LUCIDI DI F. D'AMORE E A. MARCHETTI SPACCAMELA

ANALISI SINTATTICA LUCIDI DI F. D'AMORE E A. MARCHETTI SPACCAMELA ANALISI SINTATTICA LUCIDI DI F. D'AMORE E A. MARCHETTI SPACCAMELA AUTOMI PUSHDOWN input u t w $ v x y z $ pila tabella controllo 2 ARGOMENTI Il compito dell'analisi sintattica Generazione automatica Trattamento

Dettagli

Dispensa 3. 1.1 YACC: generalità

Dispensa 3. 1.1 YACC: generalità Dispensa 3 1.1 YACC: generalità Il tool Yacc (acronimo per Yet Another Compiler Compiler) è uno strumento software che a partire da una specifica grammaticale context free di un linguaggio scritta in un

Dettagli

Primi passi con JFlex

Primi passi con JFlex Primi passi con JFlex Luca Chiodini Abstract Ci proponiamo di muovere i primi passi nel mondo dell analisi lessicale e della produzione automatica di un analizzatore lessicale. Verrà mostrato l uso di

Dettagli

Schema generale parser LR

Schema generale parser LR Schema generale parser LR Input' a 1' 8'8'8' a i' 8'8'8' a n' $' ' Pila' s m' s m81' 8'8'8 ' Programma' di'parsing' LR' ' ACTION' ' ' GOTO' ' Output' Parser diversi di eriscono per la definizione delle

Dettagli

Analizzatori Lessicali con JLex. Giuseppe Morelli

Analizzatori Lessicali con JLex. Giuseppe Morelli Analizzatori Lessicali con JLex Giuseppe Morelli Terminologia Tre concetti sono necessari per comprendere la fase di analisi lessicale: TOKEN: rappresenta un oggetto in grado di rappresentare una specifica

Dettagli

Linguaggi e Traduttori: Analisi sintattica

Linguaggi e Traduttori: Analisi sintattica Linguaggi e Traduttori: Analisi sintattica Armando Tacchella Sistemi e Tecnologie per il Ragionamento Automatico (STAR-Lab) Dipartimento di Informatica Sistemistica e Telematica (DIST) Università di Genova

Dettagli

Progetto Automi e Linguaggi Parser svliluppato con JLex e cup

Progetto Automi e Linguaggi Parser svliluppato con JLex e cup Progetto Automi e Linguaggi Parser svliluppato con JLex e cup Sviluppato da Santoro Carlo Maurizio Matricola:0108/528 Sviluppo terminato il: 18/06/06 TRACCIA DEL PROGETTO Si costruisca, utilizzando la

Dettagli

LEX. Espressioni regolari in Lex

LEX. Espressioni regolari in Lex LEX Poiché la trasformazione di espressioni regolari in automi a stati finiti deterministici e la implementazione di questi ultimi sono processi meccanici (e noiosi), spesso si utilizza un generatore automatico

Dettagli

Linguaggi di Programmazione

Linguaggi di Programmazione Linguaggi di Programmazione Lezione 4 Chiara Braghin braghin@dti.unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 6 Marzo 2007 Regole della grammatica di un linguaggio

Dettagli

Dispensa 2. Data una grammatica context free esistono tre metodi diversi per costruirne la parsing table per un parser LR:

Dispensa 2. Data una grammatica context free esistono tre metodi diversi per costruirne la parsing table per un parser LR: Dispensa 2 2.1 Costruzione Parsing Table LR: generalità Come tutti i parser tabellari predittivi, anche i parser LR possono essere applicati solo a parsing table senza conflitti (ossia entrate multiple)

Dettagli

Analisi Sintattica. Maria Rita Di Berardini. Universitá di Camerino Ruolo del parser

Analisi Sintattica. Maria Rita Di Berardini. Universitá di Camerino Ruolo del parser Ruolo del parser Analisi 1 1 Dipartimento di Matematica e Informatica Universitá di Camerino mariarita.diberardini@unicam.it Ruolo del parser Ruolo dell analisi sintattica Ruolo del parser Metodologie

Dettagli

GESTIONE DEGLI ERRORI

GESTIONE DEGLI ERRORI GESTIONE DEGLI ERRORI Spesso vi sono istruzioni critiche, che in certi casi possono produrre errori L approccio classico consiste nell inserire controlli (if else..) per cercare di intercettare a priori

Dettagli

GESTIONE DEGLI ERRORI

GESTIONE DEGLI ERRORI GESTIONE DEGLI ERRORI Spesso vi sono istruzioni critiche, che in certi casi possono produrre errori L approccio classico consiste nell inserire controlli (if else..) per cercare di intercettare a priori

Dettagli

Linguaggi e Traduttori: Analisi lessicale

Linguaggi e Traduttori: Analisi lessicale Linguaggi e Traduttori: Analisi lessicale Armando Tacchella Sistemi e Tecnologie per il Ragionamento Automatico (STAR-La) Dipartimento di Informatica Sistemistica e Telematica (DIST) Università di Genova

Dettagli

Bottom-up Parsing. Viable Prefixes, conflitti e formato delle tabelle per il parsing LR

Bottom-up Parsing. Viable Prefixes, conflitti e formato delle tabelle per il parsing LR Bottom-up Parsing Viable Prefixes, conflitti e formato delle tabelle per il parsing LR Viable Prefixes Prima di continuare finiamo il discorso sul parsing shift-reduce in generale C è una ragione importante

Dettagli

Generareanalizzatori sintattici conbison

Generareanalizzatori sintattici conbison UNIVERSITÀ DEGLI STUDI DI ROMA TOR VERGATA Generareanalizzatori sintattici conbison Corso di laurea triennale in Informatica Corso di linguaggi e traduttori Prof.ssa : Dora Giammarresi Tutor : Francesca

Dettagli

Linguaggi e Ambienti di Programmazione

Linguaggi e Ambienti di Programmazione Linguaggi e Ambienti di Programmazione Principi e tecniche diffuse che si incontrano spesso nelle applicazioni dell informatica. Compilatori Editor di struttura: riceve in input una sequenza di comandi

Dettagli

Analizzatore Lessicale Parte I Scanner

Analizzatore Lessicale Parte I Scanner Analizzatore Lessicale Parte I Scanner Sommario Dispensa di Linguaggi di Programmazione Corrado Mencar, Pasquale Lops In questa dispensa si descrive un approccio alla costruzione di un analizzatore lessicale

Dettagli

Linguaggi e Traduttori: Analisi sintattica

Linguaggi e Traduttori: Analisi sintattica Linguaggi e Traduttori: Analisi sintattica Armando Tacchella Sistemi e Tecnologie per il Ragionamento Automatico (STAR-Lab) Dipartimento di Informatica Sistemistica e Telematica (DIST) Università di Genova

Dettagli

Compilatori. Compilers. You can t live with them.. You can t live without them Sounds familiar?

Compilatori. Compilers. You can t live with them.. You can t live without them Sounds familiar? Compilatori Compilers. You can t live with them.. You can t live without them Sounds familiar? http://ksat.me/why-fantom-matters-1-the-compiler/ Compilatori Compilatori-Esempio Il problema attraverso un

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione

Dettagli

POLITECNICO DI TORINO. Laboratorio di Compilatori Corso di Linguaggi e Traduttori. Esercitazione 5. a.a 2010 / Controllo dei tipi

POLITECNICO DI TORINO. Laboratorio di Compilatori Corso di Linguaggi e Traduttori. Esercitazione 5. a.a 2010 / Controllo dei tipi POLITECNICO DI TORINO Laboratorio di Compilatori Corso di mail: stefano.scanzio@polito.it sito: a.a 2010 / 2011 Controllo dei tipi Type expressions Symbol tables Implementazione di un type-checker strutture

Dettagli

Fondamenti di Informatica

Fondamenti di Informatica Fondamenti di Informatica (L-Z) Corso di Laurea in Ingegneria Gestionale Introduzione alla Programmazione Prof. Stefano Mariani Dott. Alket Cecaj Indice Il concetto di algoritmo Algoritmo vs. programma

Dettagli

Analisi sintattica e lessicale in Haskell

Analisi sintattica e lessicale in Haskell Analisi sintattica e lessicale in Haskell I tool Alex e Happy I tool Alex e Happy Analisi sintattica e lessicale in Haskell 1 / 34 Analisi lessicale e sintattica In precedenza abbia parlato del front end

Dettagli

Esempi di programmi. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa E01. A. Miola Settembre 2007

Esempi di programmi. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa E01. A. Miola Settembre 2007 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa E01 Esempi di programmi A. Miola Settembre 2007 http://www.dia.uniroma3.it/~java/fondinf1/ Esempi di programmi - 1 1 Contenuti

Dettagli

Unità A1 Funzioni MODULO Java 2

Unità A1 Funzioni MODULO Java 2 Dare una breve descrizione dei termini introdotti: (A) CONOSCENZA TERMINOLOGICA Passaggio parametri per valore Passaggio parametri per indirizzo Parametri formali e attuali Regole di visibilità Ambiente

Dettagli

Verificare se una grammatica e LL(1) e costruirne la tabella di parsing. Verificare se una grammatica e LR(0) e costruirne la tabele ACTION e GOTO

Verificare se una grammatica e LL(1) e costruirne la tabella di parsing. Verificare se una grammatica e LR(0) e costruirne la tabele ACTION e GOTO ANALISI SINTATTICA TIPO 1: Data un linguaggio scrivere una grammatica che lo generi TIPO 2: Verificare se una grammatica non contestuale è ambigua TiPO 3: Verificare se una grammatica e LL(1) e costruirne

Dettagli

Le basi del linguaggio Java

Le basi del linguaggio Java Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una

Dettagli

Fasi di un Compilatore

Fasi di un Compilatore Dipartimento di Matematica e Informatica Università di Camerino Un implementazione compilativa di un linguaggio di programmazione viene realizzata tramite un programma che prende il nome di compilatore

Dettagli

Tabelle LALR. Costruzione delle tabelle di parsing LALR. Maria Rita Di Berardini

Tabelle LALR. Costruzione delle tabelle di parsing LALR. Maria Rita Di Berardini Costruzione delle tabelle di parsing LALR Dipartimento di Matematica e Informatica Università di Camerino mariarita.diberardini@unicam.it Metodo LALR Introduciamo l ultimo metodo di costruzione di tabelle

Dettagli

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 4 Chiara Braghin braghin@dti.unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 4 Marzo 2008 Derivazioni canoniche Una derivazione

Dettagli

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro Laboratorio di Programmazione Lezione 2 Cristian Del Fabbro Prossima lezione GIOVEDÌ 29 OTTOBRE 14:00 Input da tastiera package input; import java.io.*; public class Input { public static void main(string[]

Dettagli

Programmare. Definire una sequenza di istruzioni che specificano come effettuare una elaborazione

Programmare. Definire una sequenza di istruzioni che specificano come effettuare una elaborazione Python Programmare Definire una sequenza di istruzioni che specificano come effettuare una elaborazione Le istruzioni devono essere date in un linguaggio comprensibile dal calcolatore. In generele questi

Dettagli

Le basi del linguaggio Java

Le basi del linguaggio Java Corso di Laurea Ingegneria Civile Fondamenti di Informatica Dispensa 10 Le basi del linguaggio Java Aprile 2010 Le basi del linguaggio Java 1 Prerequisiti Nozioni generali sulla sintassi e semantica del

Dettagli

Introduzione Programmazione Java

Introduzione Programmazione Java Introduzione Programmazione Java Paolo Tomeo paolo.tomeo@poliba.it Regole basilari Java è case sensitive quindi prestare attenzione alle maiuscole Il commento si inserisce con // all'inizio della linea

Dettagli

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave

Dettagli

Dati due punti sul piano calcolare la loro distanza

Dati due punti sul piano calcolare la loro distanza Introduzione al C Primo esempio in C Dati due punti sul piano calcolare la loro distanza Soluzione: la distanza fra due punti si calcola secondo il teorema di Pitagora, con la formula: y Distanza = (lato12

Dettagli

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura:

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura: Le classi in java Un semplice programma java, formato da una sola classe, assume la seguente struttura: class Domanda static void main(string args[]) System.out.println( Quanti anni hai? ); La classe dichiarata

Dettagli

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 5 Chiara Braghin braghin@dti.unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 10 Marzo 2008 Struttura di un compilatore

Dettagli

Fondamenti d Informatica: linguaggi formali. Barbara Re, Phd

Fondamenti d Informatica: linguaggi formali. Barbara Re, Phd Fondamenti d Informatica: linguaggi formali Barbara Re, Phd Agenda } Introdurremo } La nozione di linguaggio } Strumenti per definire un linguaggio } Espressioni Regolari 2 Linguaggio } Da un punto di

Dettagli

Linguaggi e Traduttori

Linguaggi e Traduttori Linguaggi e Traduttori Progetto d esame a.a. 2014/15 Scopo del progetto è la costruzione di un compilatore per il linguaggio descritto di seguito, la cui grammatica è riportata alla fine del documento.

Dettagli

Question 1: introduction to computer programming

Question 1: introduction to computer programming Question 1: introduction to computer programming Question 1: introduction to computer programming What is a compiler? (4 points). Cos è un compilatore? (4 punti). c 2006 Marco Bernardo 1/14 Question 1:

Dettagli

JAVA - I/O System. Il JAVA considera tutte i flussi da e verso l esterno, come stream di byte. Questi possono essere di ingresso o di uscita:

JAVA - I/O System. Il JAVA considera tutte i flussi da e verso l esterno, come stream di byte. Questi possono essere di ingresso o di uscita: JAVA - I/O System Il JAVA considera tutte i flussi da e verso l esterno, come stream di byte. Questi possono essere di ingresso o di uscita: 1. InputStream: Flusso di byte in ingresso. Con questa classe

Dettagli

Laboratorio di Informatica I

Laboratorio di Informatica I Struttura della lezione Lezione : Elementi lessicali del C Vittorio Scarano Corso di Laurea in Informatica Elementi lessicali e token Costanti Identificatori Operatori operatori di incremento/decremento

Dettagli

IL LINGUAGGIO JAVA. Introduzione alla sintassi di Java La sintassi formalizza le regole sintattiche per scrivere frasi ben formate

IL LINGUAGGIO JAVA. Introduzione alla sintassi di Java La sintassi formalizza le regole sintattiche per scrivere frasi ben formate Fondamenti di Informatica IL LINGUAGGIO JAVA Sintassi, Semantica, Input, Tipi Elementari e Istruzione Condizionale 1 Introduzione alla sintassi di Java La sintassi formalizza le regole sintattiche per

Dettagli

RETI DI CALCOLATORI Linguaggio Java: Eccezioni

RETI DI CALCOLATORI Linguaggio Java: Eccezioni Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria Reggio Emilia CORSO DI RETI DI CALCOLATORI Linguaggio Java: Eccezioni Prof. Franco Zambonelli Lucidi realizzati in collaborazione

Dettagli

Fondamenti di informatica T-1 (A K) Esercitazione 2 Basi del linguaggio Java

Fondamenti di informatica T-1 (A K) Esercitazione 2 Basi del linguaggio Java Fondamenti di informatica T-1 (A K) Esercitazione 2 Basi del linguaggio Java AA 2018/2019 Tutor Lorenzo Rosa lorenzo.rosa@unibo.it 2 Programma Introduzione al calcolatore e Java Linguaggio Java, basi e

Dettagli

Automi e Linguaggi Formali

Automi e Linguaggi Formali Linguaggi di programmazione Automi e Linguaggi Formali A.A. 2014-2015 Enrico Mezzetti emezzett@math.unipd.it Struttura di un compilatore e fasi principali 01 Ottobre 2014 Linguaggio di programmazione e

Dettagli

Polimorfismo parametrico vs polimorfismo per inclusione

Polimorfismo parametrico vs polimorfismo per inclusione Polimorfismo parametrico vs polimorfismo per inclusione Esercizio Definire il tipo di dato Stack con operazioni Push( element ) Pop() Non forzare una specifica implementazione Non forzare un tipo specifico

Dettagli

C: primi elementi. Lezione 4

C: primi elementi. Lezione 4 C: primi elementi Lezione 4 Evoluzione del BCPL (1967) e B (1970), entrambi typeless Sviluppato da Dennis Ritchie nel 1972 ed implementato per il PDP-11 Usato per lo sviluppo del sistema operativo UNIX

Dettagli

Automi e Linguaggi Formali

Automi e Linguaggi Formali Automi e Linguaggi Formali Analisi Sintattica A.A. 2014-2015 Alessandro Sperduti sperduti@math.unipd.it Ruolo dell analisi sintattica Un compilatore deve produrre codice oggetto e deve anche controllare

Dettagli

Modulo 2: Strutture fondamentali della programmazione Java

Modulo 2: Strutture fondamentali della programmazione Java Modulo 2: Strutture fondamentali della programmazione Java Argomenti Trattati: Un semplice programma Java: Presentazione di un primo Esempio; Introduzione alla struttura; Compilazione ed esecuzione. Argomenti

Dettagli

Analizzatore lessicale

Analizzatore lessicale Analizzatore lessicale Legge la stringa in input e la trasforma in un flusso di token da sottoporre all analizzatore sintattico. Le frasi di un linguaggio sono stringhe di token (simboli atomici). Richieste

Dettagli

Esercizio 1.A Rispondere, in maniera concisa, alle seguenti domande (12 punti)

Esercizio 1.A Rispondere, in maniera concisa, alle seguenti domande (12 punti) Cognome e Nome: Matr.: Linguaggi di programmazione A 27 giugno 2018 Esercizio 1.A Rispondere, in maniera concisa, alle seguenti domande (12 punti) 1. In cosa l aritmetica dei puntatori differisce dall

Dettagli

Rappresentazione delle formule e definizioni ricorsive su di esse

Rappresentazione delle formule e definizioni ricorsive su di esse Rappresentazione delle formule e definizioni ricorsive su di esse Osservazione: non rappresentiamo la doppia implicazione type form = True False Prop of string Not of form And of form * form Or of form

Dettagli

Analisi sintattica. Analisi sintattica

Analisi sintattica. Analisi sintattica uolo dell analisi sintattica Un compilatore deve produrre codice oggetto e deve anche controllare che il programma in input sia scritto secondo le regole della sua sintassi L analisi lessicale controlla

Dettagli

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO CENTRO STUDI ULISSE Via Buccino, n. 22 - C.a.p. 84018 - Scafati (SA) Tel. Fax. 081.19970299-339.2365416-349.4152010 E-mail: info@centrostudiulisse.it - www.centrostudiulisse.it OCA JAVA 7 SE PROGRAMMER

Dettagli

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Struttura di un programma Java

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Struttura di un programma Java Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA 1 Struttura di un programma Java Un programma Java consiste in un insieme di definizioni di classi. In genere

Dettagli

Introduction. The Structure of a Compiler

Introduction. The Structure of a Compiler Introduction The Structure of a Compiler ISBN 978-88-386-6573-8 Text Books Maurizio Gabbrielli e Simone Martini sono professori ordinari di Informatica presso l'alma Mater Studiorum - Università di Bologna.

Dettagli

Corso di Laurea in Informatica Applicata Prima Prova di Verifica Intermedia di Programmazione II 1 Dicembre 2010

Corso di Laurea in Informatica Applicata Prima Prova di Verifica Intermedia di Programmazione II 1 Dicembre 2010 Corso di Laurea in Informatica Applicata Prima Prova di Verifica Intermedia di Programmazione II 1 Dicembre 2010 Istruzioni: scrivere le risposte alle domande negli spazi presenti nel testo e riconsegnare

Dettagli

Introduzione al C. InformaticaB. Daniele Loiacono

Introduzione al C. InformaticaB. Daniele Loiacono Introduzione al C InformaticaB Facciamo un passo indietro Compilare o Interpretare? q Come rendo comprensibili al calcolatore i programmi scritti in un linguaggio di programmazione (ad es. C, C++, Java)?

Dettagli

Linguaggi e Traduttori Esercitazione di laboratorio N.2 - soluzione

Linguaggi e Traduttori Esercitazione di laboratorio N.2 - soluzione Linguaggi e Traduttori Esercitazione di laboratorio N.2 - soluzione Esercizio Si scriva, usando LEX e YACC, un programma in grado riconoscere la sintassi di un sottoinsieme del linguaggio C. Dato un file

Dettagli

Traduzione guidata dalla sintassi

Traduzione guidata dalla sintassi Traduzione guidata dalla sintassi Attributi e definizioni guidate dalla sintassi Dipartimento di Matematica e Informatica mariarita.diberardini@unicam.it Analisi Semantica Analisi sintattica - output:

Dettagli

Analisi lessicale (scanner)

Analisi lessicale (scanner) Corso di Laurea Magistrale in Ingegneria Informatica A.A. 2011-2012 Linguaggi Formali e Compilatori Analisi lessicale (scanner) Giacomo PISCITELLI Ruolo dell Analizzatore lessicale Compito di un analizzatore

Dettagli

Analisi lessicale (scanner)

Analisi lessicale (scanner) Corso di Laurea Magistrale in Ingegneria Informatica A.A. 2013-2014 Linguaggi Formali e Compilatori Analisi lessicale (scanner) Giacomo PISCITELLI Distinzione terminologica stringa lessicale o lessema

Dettagli

Esempio su strutture dati dinamiche: ArrayList

Esempio su strutture dati dinamiche: ArrayList Esempio su strutture dati dinamiche: ArrayList 1 ArrayList! Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione

Dettagli

Il Modello di un Compilatore. La costruzione di un compilatore per un particolare linguaggio di programmazione e' abbastanza complessa.

Il Modello di un Compilatore. La costruzione di un compilatore per un particolare linguaggio di programmazione e' abbastanza complessa. Il Modello di un Compilatore La costruzione di un compilatore per un particolare linguaggio di programmazione e' abbastanza complessa. La complessità dipende dal linguaggio sorgente. Compilatore: traduce

Dettagli

Linguaggi Formali e Compilatori Proff. Breveglieri, Crespi Reghizzi, Morzenti Prova scritta 1 : Domanda relativa alle esercitazioni 08/09/2011

Linguaggi Formali e Compilatori Proff. Breveglieri, Crespi Reghizzi, Morzenti Prova scritta 1 : Domanda relativa alle esercitazioni 08/09/2011 Linguaggi Formali e Compilatori Proff. Breveglieri, Crespi Reghizzi, Morzenti Prova scritta 1 : Domanda relativa alle esercitazioni 08/09/2011 COGNOME:.............................................................

Dettagli

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 11 Alberto Ceselli alberto.ceselli@unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 06 Aprile 2009 Riassunto delle puntate

Dettagli

Programmare. Definire una sequenza di istruzioni che specificano come effettuare una elaborazione

Programmare. Definire una sequenza di istruzioni che specificano come effettuare una elaborazione Python Programmare Definire una sequenza di istruzioni che specificano come effettuare una elaborazione Le istruzioni devono essere date in un linguaggio comprensibile dal calcolatore. In generele questi

Dettagli

Analisi sintattica (parser)

Analisi sintattica (parser) Corso di Laurea Magistrale in Ingegneria Informatica A.A. 2013-2014 Linguaggi Formali e Compilatori Analisi sintattica (parser) Giacomo PISCITELLI Analisi sintattica: il parser Problema di base dell analisi

Dettagli

Supplemento alle dispense di Sintassi

Supplemento alle dispense di Sintassi Supplemento alle dispense di Sintassi Luca Tesei 20 ottobre 2002 1 Formalizzazione Lo scopo di questa sezione è quello di presentare in maniera formale e precisa le nozioni di Automa e di Grammatica Libera

Dettagli

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 3 Alberto Ceselli alberto.ceselli@unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 09 Marzo 2009 Riassunto delle puntate

Dettagli

Riferimenti ad oggetti: Fondamenti di Informatica L-B Esercitazione n 4 Java: I/O, Costruttori e altro. Riferimenti ad oggetti: (Esempio)

Riferimenti ad oggetti: Fondamenti di Informatica L-B Esercitazione n 4 Java: I/O, Costruttori e altro. Riferimenti ad oggetti: (Esempio) Fondamenti di Informatica L-B Esercitazione n 4 Java: I/O, Costruttori e altro A.A. 2005/06 Tutor: Loris Cancellieri loris.cancellieri@studio.unibo.it Riferimenti ad oggetti: Cosa si può fare con i riferimenti?

Dettagli

Programmazione a Oggetti Lezione 11. Eccezioni e Packages

Programmazione a Oggetti Lezione 11. Eccezioni e Packages Programmazione a Oggetti Lezione 11 Eccezioni e Packages Sommario Eccezioni Sollevamento Cattura Trattamento Packages e visibilità Eccezioni I programmi spesso si trovano ad operare in condizioni anomale:

Dettagli

Corso di Reti di Calcolatori L-A

Corso di Reti di Calcolatori L-A Università degli Studi di Bologna Facoltà di Ingegneria Corso di Reti di Calcolatori L-A Esercitazione 0 (svolta) Multithreading in Java Luca Foschini Anno accademico 2009/2010 Esercitazione 0 1 Modello

Dettagli

Introduzione al C. Unità 10 Preprocessore. D. Bloisi, S. Peluso, A. Pennisi, S. Salza

Introduzione al C. Unità 10 Preprocessore. D. Bloisi, S. Peluso, A. Pennisi, S. Salza Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR Introduzione al C Unità 10 Preprocessore D. Bloisi, S. Peluso, A. Pennisi, S. Salza Sommario Processo

Dettagli

Linguaggi e Traduttori: Analisi sintattica

Linguaggi e Traduttori: Analisi sintattica Linguaggi e Traduttori: Analisi sintattica Armando Tacchella Sistemi e Tecnologie per il Ragionamento Automatico (STAR-Lab) Dipartimento di Informatica Sistemistica e Telematica (DIST) Università di Genova

Dettagli

COMPILATORI: MODELLO La costruzione di un compilatore per un particolare linguaggio di programmazione è complessa. La complessità dipende dal linguagg

COMPILATORI: MODELLO La costruzione di un compilatore per un particolare linguaggio di programmazione è complessa. La complessità dipende dal linguagg COMPILATORI: MODELLO La costruzione di un compilatore per un particolare linguaggio di programmazione è complessa. La complessità dipende dal linguaggio sorgente Compilatore: traduce il programma sorgente

Dettagli

Eccezioni Precisazioni e approfondimenti

Eccezioni Precisazioni e approfondimenti Eccezioni Precisazioni e approfondimenti Costruttore: il parametro String definisce il messaggio di errore associato all eccezione Metodi particolarmente significativi getmessage(): ritorna l istanza di

Dettagli

Parser Bottom UP. Giuseppe Morelli

Parser Bottom UP. Giuseppe Morelli Parser Bottom UP Giuseppe Morelli Parser Bottom UP Un parser Bottom Up lavora costruendo il corrispondente albero di parsing per una data stringa di input partendo dalle foglie (bottom) e risalendo via

Dettagli

Capitolo 5 - Funzioni

Capitolo 5 - Funzioni Capitolo 5 - Funzioni Divide and conquer Introduzione Costruire un programma da pezzi più piccoli o da singole componenti Questi pezzi più piccoli sono chiamati moduli Ogni singolo pezzo è più facilmente

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA2 2.1- Funzioni 1 Prerequisiti Programmazione elementare in Java Tecnica top-down Concetto matematico di funzione Compilazione e link di programmi Esecuzione di funzioni

Dettagli

Il Modello di un Compilatore. La costruzione di un compilatore per un particolare linguaggio di programmazione e' abbastanza complessa.

Il Modello di un Compilatore. La costruzione di un compilatore per un particolare linguaggio di programmazione e' abbastanza complessa. Il Modello di un Compilatore Dispensa del corso di Linguaggi e Traduttori A.A. 2005-2006 La costruzione di un compilatore per un particolare linguaggio di programmazione e' abbastanza complessa. La complessità

Dettagli

PROGRAMMAZIONE Nomi, binding, regole di visibilità (scope)

PROGRAMMAZIONE Nomi, binding, regole di visibilità (scope) PROGRAMMAZIONE 2 19. Nomi, binding, regole di visibilità (scope) PR2 2017-2018 1 Nomi Un nome in un linguaggio di programmazione è esattamente quello che immaginate o la maggior parte dei nomi sono definiti

Dettagli

Definizioni syntax-directed

Definizioni syntax-directed Definizioni syntax-directed Esempio: Notazione infissa Notazione postfissa Produzioni E E 1 + T E E 1 T E T T 0 T 1 T 2... T 9 Regole semantiche E.t := E 1.t _T.t _ + E.t := E 1.t _T.t _ - E.t := T.t T.t

Dettagli

Linguaggi e grammatiche. Esercizi. Linguaggi e grammatiche. Linguaggi e grammatiche

Linguaggi e grammatiche. Esercizi. Linguaggi e grammatiche. Linguaggi e grammatiche Esercizi Grammatiche, scoping Univ. di Udine Grammatiche, scoping (Univ. di Udine) Esercizi 1 / 29 Linguaggi e grammatiche Definire i numeri divisibili per 2 in base 3, come grammatica libera da contesto

Dettagli