Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers...

73
Implementazione di Implementazione di Linguaggi 2 Linguaggi 2 Massimo Ancona Massimo Ancona Testo: Testo: A.V. Aho, R. Sethi, A.V. Aho, R. Sethi, J.D.Ullman Compilers J.D.Ullman Compilers Principles,Techniques and Tools, Principles,Techniques and Tools, Addison Wesley Addison Wesley

Transcript of Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers...

Page 1: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

Implementazione di Implementazione di Linguaggi 2Linguaggi 2

Massimo AnconaMassimo Ancona

Testo: Testo: A.V. Aho, R. Sethi, J.D.Ullman A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Compilers Principles,Techniques and

Tools, Addison WesleyTools, Addison Wesley

Page 2: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

22

Diagramma del processo di Diagramma del processo di compilazionecompilazione

Page 3: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

33

Strumenti associati al Strumenti associati al compilatore: il Linkercompilatore: il Linker

Page 4: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

44

Contesto/ambiente di un Contesto/ambiente di un cmpcmp

Programming EnvironmentProgramming EnvironmentUn ambiente grafico interattivo per lo sviluppo, il Un ambiente grafico interattivo per lo sviluppo, il

testing e la manutenzione dei programmi:testing e la manutenzione dei programmi: integra e integra e gestisce gli strumenti e i meccanismi seguentigestisce gli strumenti e i meccanismi seguenti

Strumenti e meccanismi correlati ai compilatoriStrumenti e meccanismi correlati ai compilatori Sistemi per le compilazioni separate Sistemi per le compilazioni separate Sistemi per il controllo delle versioniSistemi per il controllo delle versioni Meccanismi per le ricompilazioni efficientiMeccanismi per le ricompilazioni efficienti Macroprocessori e PreprocessoriMacroprocessori e Preprocessori Linker loaderLinker loader Interpreti debugger profilerInterpreti debugger profiler

Page 5: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

55

Processo Di CompilazioneProcesso Di Compilazione Nella sua forma piu' astratta il processo di compilazione e' descritto nella figura seguente: il compiler e' una funzione che mappa un programma in linguaggio sorgente in un programma equivalente in linguaggio oggetto.

Page 6: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

66

Fasi e Passi (Passate)Fasi e Passi (Passate) Sono due concetti ortogonali: Le fasi denotano trasformazioni sul programma eseguite da tutti i compilatori.

I passi si riferiscono al numero di processi successivi, in cui e' suddiviso un compilatore (il loro numero dipende in parte dal linguaggio).

Il compilatore in una passata, legge il codice sorgente o una sua forma intermedia equivalente, raffinando il processo di treduzione e producendo una nuova rappresentazione intermedia, fino ad arrivare al codice target, nell’ultima passata.

Page 7: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

77

Fasi Di CompilazioneFasi Di Compilazione

Una fase denota il tipo di operazione effettuata. Fasi e passate sono concetti ortogonali anche se una struttura canonica del compilatore tende ad incapsulare una (o piu') fasi, in una specifica passata.La divisione piu' grossolana prevede due fasi: analisi e sintesi. Con la prima il programma sorgente viene suddiviso nelle parti costituenti ottenendone una rappresentazione intermedia. Nella seconda si costruisce il programma target nel linguaggio oggetto.

Page 8: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

88

Analisi e SintesiAnalisi e Sintesi

Strumenti che eseguono l’analisi dell’inputStrumenti che eseguono l’analisi dell’input

Editori di testo, Formattatori e Sistemi Editori di testo, Formattatori e Sistemi Ipertestuali (HTML, XML, PDF, TEX) Ipertestuali (HTML, XML, PDF, TEX)

Silicon Compilers (sintetizzatori di circuiti e Silicon Compilers (sintetizzatori di circuiti e componenti Hardware)componenti Hardware)

Query InterpretersQuery Interpreters Motori di Ricerca e strumenti correlatiMotori di Ricerca e strumenti correlati

Page 9: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

99

Analisi e Sintesi Analisi e Sintesi

Analisi e SintesiAnalisi e Sintesi AnalisiAnalisi

divide il pgm sorgente nelle parti divide il pgm sorgente nelle parti costituenti creando una costituenti creando una rappresentazione intermedia.rappresentazione intermedia.

Sintesi Sintesi

costruisce il programma oggettocostruisce il programma oggetto dalla dalla rappresentazione intermedia.rappresentazione intermedia.

Page 10: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

1010

Dettaglio Dettaglio DelleDelle Fasi Fasi ELenco completo delle possibili fasi di compilazione:

Page 11: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

1111

Rappresentazioni Rappresentazioni IntermedieIntermedie

sorgente primo := base + 53 * delta;out lessicale id[1] op= id[2] op+ ci=53 op* id[3]out sintattico op= id[1] op+ id[2] op* 53 id[3]

Page 12: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

1212

Rappresentazioni Rappresentazioni Intermedie (e Finali) Intermedie (e Finali)

out semantica op=

id[1] op+

id[2] op* float id[3] 53

Page 13: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

1313

Rappresentazioni Rappresentazioni Intermedie Intermedie

codice intermedio

tmp1 = float(53) tmp2 = id[3] op* tmp1 tmp3 = id[2] op+ tmp2 id[1] = tmp3

Ottimizzazione di codice (intermedio)

tmp1 = id[3] op* 53.00 id[1] = id[2] op+ tmp1

Page 14: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

1414

Rappresentazione Finale Rappresentazione Finale

codice macchina: movf id3, rf2 mulf #53.00, rf2 movf id[2], rf1 addf rf2, rf1 movf rf1, id[1]

Supponiamo di utilizzare

solamente due registri rf1 e rf2.

Page 15: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

1515

Tipi di CompilatoriTipi di Compilatori

Vi sono diversi tipi di compilatoriVi sono diversi tipi di compilatori Ad un sol passoAd un sol passo Multi-passoMulti-passo Load_and_goLoad_and_go DebuggingDebugging OptimizingOptimizing Compiler-InterpreterCompiler-Interpreter

Page 16: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

1616

Introduzione alla Introduzione alla CompilazioneCompilazione

Un compilatore in due passate

Page 17: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

1717

Le fasi di analisi del Le fasi di analisi del sorgentesorgente

Analisi Lessicale. Analisi Lessicale. I caratteri del codice I caratteri del codice sorgente vengono letti left-to-right e sorgente vengono letti left-to-right e raggruppati in Token.raggruppati in Token.

Analisi Sintattica. Analisi Sintattica. I caratteri o token sono I caratteri o token sono raggruppati in frasi grammaticali.raggruppati in frasi grammaticali.

Analisi Semantica. Analisi Semantica. Vengono effettuati Vengono effettuati controlli per trovare errori semantici e controlli per trovare errori semantici e raccogliere informazioni per la raccogliere informazioni per la generazione di codice.generazione di codice.

Page 18: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

1818

Le fasi di analisi del Le fasi di analisi del sorgentesorgente

Analisi Lessicale.Analisi Lessicale.

Source

ProgramLexical

analyzerParser

Token

Get next Token

SymbolTable

Page 19: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

1919

Le fasi di analisi del sorgenteLe fasi di analisi del sorgenteAnalisi Lessicale.Analisi Lessicale.

Ad esempio l’istruzione:Ad esempio l’istruzione:alpha:=beta+gamma*100;alpha:=beta+gamma*100;

viene codificata nei seguenti TOKEN:viene codificata nei seguenti TOKEN:

<ID:’alpha’><OP::=><ID:’beta’><OP:<ID:’alpha’><OP::=><ID:’beta’><OP:><I><ID:’gamma’><OP:D:’gamma’><OP:><VAL:’100’>><VAL:’100’>

Gli spazi ridondanti, i fine linea ecc. che Gli spazi ridondanti, i fine linea ecc. che separano i token vengono eliminati.separano i token vengono eliminati.

Eseguita dallo

Scanner

Page 20: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

2020

Le fasi di analisi del Le fasi di analisi del sorgentesorgente

Analisi Sintattica.Analisi Sintattica. Ogni linguaggio di programmazione Ogni linguaggio di programmazione

ha delle regole che descrivono la ha delle regole che descrivono la struttura sintattica di un struttura sintattica di un programma programma ben formatoben formato..

La sintassi di un linguaggio di La sintassi di un linguaggio di programmazione può essere descritta programmazione può essere descritta da una grammatica libera da contesto da una grammatica libera da contesto

Page 21: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

2121

Le fasi di analisi del Le fasi di analisi del sorgentesorgente

Analisi Sintattica.Analisi Sintattica.

Source

ProgramLexical

analyzerParser

Token

Get next Token

SymbolTable

ParseTree

Page 22: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

2222

Le fasi di analisi del sorgenteLe fasi di analisi del sorgenteAnalisi Sintattica.Analisi Sintattica.

Agisce dopo l’analisi lessicale. Raggruppa i token in frasi Agisce dopo l’analisi lessicale. Raggruppa i token in frasi grammaticali che si rappresentano con un grammaticali che si rappresentano con un parse treeparse tree..

Parse tree di: Parse tree di: alpha := beta + gamma * 100alpha := beta + gamma * 100

(<:=>)(<:=>)

<EXP:ID> <EXP: <EXP:ID> <EXP: >>

<ID:’alpha’> <EXP:ID> <EXP: <ID:’alpha’> <EXP:ID> <EXP: >>

<ID:’beta’> <EXP:ID> <ID:’beta’> <EXP:ID> <EXP:VAL><EXP:VAL>

<ID:’gamma’> <ID:’gamma’> <VAL:’100’><VAL:’100’>

Eseguita dal

Parser

Page 23: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

2323

Le fasi di analisi del sorgenteLe fasi di analisi del sorgenteAnalisi Semantica.Analisi Semantica.

Controlla il codice sorgente alla ricerca di Controlla il codice sorgente alla ricerca di errori semantici e raccoglie informazioni errori semantici e raccoglie informazioni sui tipi per la fase di generazione di sui tipi per la fase di generazione di codicecodice

Type checkingType checking è la componente più è la componente più importate di questa fase:importate di questa fase: Controlla che gli operatori abbiano operandi Controlla che gli operatori abbiano operandi

permessi dalla specifica del linguaggio.permessi dalla specifica del linguaggio.

Page 24: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

2424

Relazione tra le Fasi Relazione tra le Fasi

La suddivisione tra analisi lessicale e La suddivisione tra analisi lessicale e sintattica è piuttosto arbitraria (come per sintattica è piuttosto arbitraria (come per le altre fasi della compilazione); le altre fasi della compilazione);

Uno dei metodi usati per discriminarle si Uno dei metodi usati per discriminarle si basa sulla basa sulla ricorsionericorsione:: i costrutti descrivibili senza ricorsione si i costrutti descrivibili senza ricorsione si

assegnano all’analisi lessicale;assegnano all’analisi lessicale; quelli sostanzialmente ricorsivi a quella quelli sostanzialmente ricorsivi a quella

sintatticasintattica..

Page 25: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

2525

Sintassi Formale dei Linguaggi Sintassi Formale dei Linguaggi di Programmazionedi Programmazione

La si specifica tramite: La si specifica tramite: diagrammi sintattici; diagrammi sintattici; equazioni BNF EBNF;equazioni BNF EBNF; grammatiche non contestuali (context grammatiche non contestuali (context

free)free)

Tutte forme sostanzialmente Tutte forme sostanzialmente equivalenti. equivalenti.

Page 26: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

2626

Grammatiche Libere da Grammatiche Libere da Contesto (CFG)Contesto (CFG)

Le Context Free Grammar sono una notazione Le Context Free Grammar sono una notazione per specificare la sintassi di un linguaggio.per specificare la sintassi di un linguaggio.

Una CFG ha 4 componenti:Una CFG ha 4 componenti: Un insieme di token, detti Un insieme di token, detti simboli terminalisimboli terminali Un insieme di Un insieme di non-terminalinon-terminali Un insieme diUn insieme di produzioniproduzioni, dove ogni produzione , dove ogni produzione

consiste di un non-terminale (consiste di un non-terminale (left sideleft side), una freccia ), una freccia e una sequenza di token e/o non-terminali (e una sequenza di token e/o non-terminali (right right sideside))

L’indicazione di un non-terminale come L’indicazione di un non-terminale come simbolo simbolo inizialeiniziale

Page 27: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

2727

Grammatiche Libere da Grammatiche Libere da Contesto EsempioContesto Esempio

Vediamo un esempio di produzioni che Vediamo un esempio di produzioni che definiscono semplici espressioni aritmetiche:definiscono semplici espressioni aritmetiche:

expr expr expr op expr expr op exprexpr expr ( expr ) ( expr )expr expr id id op op + + op op - - op op * * op op / / op op

Simboli terminali: id + - * / ( (( (

Simboli non-terminali: expr op

Simbolo iniziale: expr

Page 28: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

2828

Grammatiche Libere da Grammatiche Libere da Contesto EsempioContesto Esempio

Scrivere la grammatica context free Scrivere la grammatica context free per esprimere zero o più volte il per esprimere zero o più volte il simbolo (terminale) thing.simbolo (terminale) thing.

List List List List thing thingList List List List ListList

List List List List thing thing ListListList List List List List List thingthing

Page 29: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

2929

Grammatiche Libere da Grammatiche Libere da Contesto (CFG): Definizione Contesto (CFG): Definizione

FormaleFormale Alfabeto Alfabeto TT ( () ) ::

è un insieme finito non vuoto, eè un insieme finito non vuoto, e

gli elementi di gli elementi di TT ( () ) vengonovengono chiamati chiamati simbolisimboli o o carattericaratteri..

Useremo le lettere Useremo le lettere V, T, N, V, T, N, per indicare per indicare alfabetialfabeti

Page 30: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

3030

Grammatiche Libere da Grammatiche Libere da Contesto (CFG): Definizione Contesto (CFG): Definizione

FormaleFormale Parola Parola di lunghezza di lunghezza kk00, su un alfabeto, su un alfabeto

TT:: è una sequenza finita è una sequenza finita w=xw=x11xx22…x…xk k di di

elementi di elementi di T,T,

kk, denotata anche , denotata anche k=|w|k=|w| è detta lunghezza è detta lunghezza di di ww, e, e

la parola di lunghezza la parola di lunghezza zerozero, detta , detta parola parola vuotavuota, e’ indicata , e’ indicata ..

Page 31: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

3131

Grammatiche Libere da Grammatiche Libere da Contesto (CFG): Definizione Contesto (CFG): Definizione

FormaleFormale L’insieme L’insieme delledelle parole su T (parole su T (linguaggiolinguaggio),),

indicato conindicato con T*T* monoide:monoide: con legge di composizione con legge di composizione concatenazione di paroleconcatenazione di parole DateDate ww11,w,w22TT, ,

ww11= x= x11xx22…x…xkk,, ww22= y= y11yy22…y…yll

w= ww= w11.w.w22= x= x11xx22…x…xkkyy11yy22…y…yll,, di lunghezzadi lunghezza k+lk+l, ,

è detta concatenazione diè detta concatenazione di ww11 ee ww22. .

Il monoide Il monoide (T*,.)(T*,.) è detto è detto monoide liberomonoide libero su su TT..

Page 32: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

3232

Parentesi Algebrica: Parentesi Algebrica: MonoideMonoide

Un Un monoidemonoide è un insieme M munito di una singola è un insieme M munito di una singola operazione binaria, chiamata prodotto, che ad ogni operazione binaria, chiamata prodotto, che ad ogni coppia di elementi a, b di M associa un elemento coppia di elementi a, b di M associa un elemento ab, rispettando i seguenti assiomi: ab, rispettando i seguenti assiomi:

per ogni a, b appartenenti a M, il loro prodotto ab per ogni a, b appartenenti a M, il loro prodotto ab appartiene ancora a M, vale a dire, appartiene ancora a M, vale a dire, M è M è chiusochiuso rispetto al rispetto al prodottoprodotto..

Il prodotto è Il prodotto è associativoassociativo: dati a, b, c appartenenti a M, : dati a, b, c appartenenti a M, vale (vale (abab))cc = = aa((bcbc). ).

Esiste in M un (unico) Esiste in M un (unico) elemento elemento neutroneutro e tale che e tale che aeae = = eaea = = aa. .

Page 33: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

3333

Grammatiche Libere da Grammatiche Libere da Contesto (CFG): Definizione Contesto (CFG): Definizione

FormaleFormaleUna Una CFGCFG formalmente è una quadrupla formalmente è una quadrupla

G=(N,T,P,S)G=(N,T,P,S) con con NNT=T= e e V=NV=NTT, dove:, dove: TT è un alfabeto di simboli terminali di è un alfabeto di simboli terminali di G.G. NN è un alfabeto di simboli non-terminali è un alfabeto di simboli non-terminali

di di G.G. PP è un insieme finito di produzioni di è un insieme finito di produzioni di G.G. SSNN è detto simbolo iniziale di è detto simbolo iniziale di GG..

Page 34: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

3434

Grammatiche Libere da Grammatiche Libere da Contesto (CFG): Definizione Contesto (CFG): Definizione

FormaleFormaleNotazione utilizzata per le produzioniNotazione utilizzata per le produzioni NNV*:V*:

a,b,c,…,+,-,…,0,1,…,(,[,{,…a,b,c,…,+,-,…,0,1,…,(,[,{,… indicano elementi di indicano elementi di T T (= (= terminali)terminali)

A,B,C,…A,B,C,… indicano elementi di indicano elementi di N N (= non-terminali)(= non-terminali)

U,V,X,Y,ZU,V,X,Y,Z indicano elementi di indicano elementi di V=TV=TN N

u,v,x,y,u,v,x,y, indicano elementi di indicano elementi di T*T*(= stringhe di terminali)(= stringhe di terminali)

,,,,,…,,…, indicano elementi di indicano elementi di V* V* (= stringhe di simboli (= stringhe di simboli grammaticali)grammaticali)

=(A,=(A,))NNV*V* è è indicata daindicata da AA

Page 35: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

3535

Linguaggi Context Free Linguaggi Context Free

Linguaggio generato da G: Linguaggio generato da G:

L(G)=L(G)=wwT*| S T*| S * w* w

Un linguaggioUn linguaggio L L T*T* è libero da contesto è libero da contesto sese esiste esiste G=(N,T,P,S) CFGG=(N,T,P,S) CFG tale chetale che L=L(G)L=L(G)

Page 36: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

3636

Forme SentenzialiForme Sentenziali

Data Data G=(N,T,P,S)G=(N,T,P,S) una forma sentenziale di una forma sentenziale di GG è definita ricorsivamente, come segue:è definita ricorsivamente, come segue: SS è una forma sentenziale di è una forma sentenziale di GG,, se se AA è una forma sentenziale di è una forma sentenziale di GG e e AA è è

una produzione di una produzione di GG allora allora è una forma è una forma sentenziale di sentenziale di G.G.

La relazione traLa relazione tra AA ee alal punto punto precedente viene indicata: precedente viene indicata:

AA ( (DerivazioneDerivazione))

Page 37: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

3737

Derivazioni Dirette e NonDerivazioni Dirette e Non

AA esprime che esprime che deriva deriva direttamentedirettamente da da AA o che o che AA genera genera direttamente direttamente . .

Le notazioni Le notazioni * * ++ indicano rispettivamente la indicano rispettivamente la chiusura transitiva-riflessiva e transitiva di chiusura transitiva-riflessiva e transitiva di * * denota che denota che == oppure oppure

ii i=1..n i=1..n ==11 22 … … nn = = e e n>0.n>0. + denota che denota che =1 2 … n =

e e n>0n>0..

Page 38: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

3838

Derivazioni - EsercizioDerivazioni - Esercizio

La stringa La stringa – ( id + id ) – ( id + id ) è una sentenza è una sentenza della grammatica G? della grammatica G?

E E - E - ( E ) - ( E + E ) - ( id + E ) - ( id + id )

G:E E + E E E * EE ( E )E - EE id

E * - ( id + id )

Page 39: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

3939

Derivazioni canonicheDerivazioni canoniche

Una derivazione Una derivazione * e’ detta e’ detta canonica destracanonica destra e indicata e indicata rm

* , , se ad ogni passo di derivazione si se ad ogni passo di derivazione si espande il simbolo non-terminale più espande il simbolo non-terminale più a destra.a destra. rm* se se i si ha i si ha ii==iiAAiixxii, , i+1i+1==iiiixxii, , Ai i, , =1 2 … n = i=1,…,n

Page 40: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

4040

Derivazioni canonicheDerivazioni canoniche

Una derivazione Una derivazione * e’ detta e’ detta canonica sinistracanonica sinistra e indicata e indicata lm

* , , se ad ogni passo di derivazione si se ad ogni passo di derivazione si espande il simbolo non-terminale più espande il simbolo non-terminale più a sinistra.a sinistra. lm* se se i i si ha si ha ii=x=xiiAAii ii, , i+1=xii i, Ai i, =1 2 … n = i=1,…,n

Page 41: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

4141

Derivazioni Canoniche Derivazioni Canoniche EsempioEsempio

G=(G=({{EE,,TT,,PP}}, , {{((,,)),,aa,,bb,,cc,,**,,++,,--}}, P, E), P, E)P={P={EEE E ++T T ||E E --T T ||TT, ,

TT T T **P P ||PP, , PP ( (E E ) | a | b | c}) | a | b | c}Data Data (a-b) – c(a-b) – c la derivazione: la derivazione:E E EE --T T TT --T T PP --T T (EE )-)-T T (E E -- TT )-)-T T (T T -- TT )-)-T T (P P -- TT )-)-T T (a -a - T T )-)-T T (a -a - P P )-)-T T (a -a - b b )-)-TT (a -a - bb )-)-P P (a -a - bb ) - c) - c

È canonica sinistra.È canonica sinistra.

Non-terminaliterminali

Page 42: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

4242

Esempio Esempio Sia G=({E,T,P}, {(,),a,b,c,*,+,-}, P, E) doveSia G=({E,T,P}, {(,),a,b,c,*,+,-}, P, E) doveP={EP={EE+T | E-T | T, T E+T | E-T | T, T T*P | P, P T*P | P, P (E) | a | b |c} (E) | a | b |c}La derivazione:La derivazione:

EE E-T E-P E-c T-c P-c (E)-c (E-T)-c (E-P)-c (E-b)-c (T-b)-T (P-b)-c (a-b)-c

è è canonica destracanonica destra, confrontandola con la , confrontandola con la canonicacanonica sinistrasinistra: : EE E-T T-T P-T (E)-T (E-T)-T (T-T)-T (P-T)-T (a-T)-T (a-P)-T (a-b)-T (a-b)-P (a-b)-c

Si vede che differiscono solo per l’ordine di applicazione Si vede che differiscono solo per l’ordine di applicazione delle produzioni. delle produzioni. Entrambe applicano le stesse Entrambe applicano le stesse produzioni alle stesse istanze di non terminaliproduzioni alle stesse istanze di non terminali

Page 43: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

4343

Parsing Tree Parsing Tree

Tutte le derivazioni che differiscono solo Tutte le derivazioni che differiscono solo per l’ordine di applicazione delle per l’ordine di applicazione delle produzioni sono sostanzialmente produzioni sono sostanzialmente equivalenti e possono essere equivalenti e possono essere rappresentate da un’unica derivazione rappresentate da un’unica derivazione canonica destra, un’ unica derivazione canonica destra, un’ unica derivazione canonica sinistra o da un unico albero canonica sinistra o da un unico albero etichettato detto etichettato detto Parsing TreeParsing Tree..

Page 44: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

4444

Parsing Tree - Definizione Parsing Tree - Definizione

La radice è etichettata da S Ogni foglia dell’albero è etichettato da o

da un simbolo di T (terminale) Ogni nodo interno è etichettato da un

simbolo di N (non terminale) Se A etichetta un nodo interno e X1,X2,…,

Xn sono le etichette dei figli, allora AX1X2…Xn P

Page 45: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

4545

Parsing Tree - EsempioParsing Tree - Esempio

Derivazione: Derivazione: - (id + id)- (id + id)

EE

-- E E

(( E E ))

E E ++ E E

id idid id

G:E E + E E E * EE ( E )E - EE id

Page 46: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

4646

Esempio di Parsing Tree Esempio di Parsing Tree

Derivazione di:Derivazione di: (a – b ) – c(a – b ) – c

Grammatica:

EEE E ++T T ||E E --T T ||TT

TT T T **P P ||PP, ,

PP ((E E )) | a | b | | a | b | cc}}

Page 47: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

4747

Classificazione di Chomsky È una classificazione dei linguaggi basata

sulla complessità delle produzioni delle grammatiche che li generano. I linguaggi di tipo 0 sono generati da

grammatiche a struttura di frase. I linguaggi di tipo 1 sono generati da

grammatiche dipendenti dal contesto. I linguaggi di tipo 2 sono generati da

grammatiche libere dal contesto. I linguaggi di tipo 3 sono generati da

grammatiche lineari (o regolari).

Page 48: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

4848

Classificazione di Chomsky Grammatiche a struttura di frase.

Le produzioni sono del tipo A Grammatiche dipendenti dal contesto.

Le produzioni sono del tipo A dove , V*, AN e V* .

Grammatiche libere dal contesto. Le produzioni sono del tipo A, dove V* .

Grammatiche lineari (o regolari). Le produzioni sono del tipo AuB oppure Au, dove u * e A, B N.

Page 49: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

4949

Classificazione di Chomsky

Ogni grammatica di tipo n è anche una grammatica di tipo n − 1.

Un linguaggio è di tipo n se è generato da una grammatica di tipo n, ma non di tipo n + 1.

Esempi:- Linguaggio di tipo 3: L = {ambn : m, n 0}.- Linguaggio di tipo 2: L = {anbn : n 0}.- Linguaggio di tipo 1: L = {anbncn : n 0}.- Linguaggio di tipo 0: L = {an : n è numero primo}.

Page 50: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

5050

Grammatiche e Linguaggi Grammatiche e Linguaggi AmbiguiAmbigui

Una grammatica Una grammatica GG è è ambiguaambigua se: se: wwL(G) con due parsing tree diversi L(G) con due parsing tree diversi

Un linguaggio è inerentemente Un linguaggio è inerentemente ambiguo se per ogni G tale che ambiguo se per ogni G tale che L=L(G) si ha che G e’ ambigua. L=L(G) si ha che G e’ ambigua.

Page 51: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

5151

Tecniche per Tecniche per DisambiguareDisambiguare

Inserire regole di precedenza per gli Inserire regole di precedenza per gli operatori.operatori.

Utilizzare associatività a sinistra o a Utilizzare associatività a sinistra o a destra.destra.

Manipolare la grammatica.Manipolare la grammatica.

Page 52: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

5252

Grammatica Ambigua Grammatica Ambigua EsempioEsempio

G=({S}, {G=({S}, {ifif,, then then,, else else,, s, b s, b},}, P={S P={S if if bb then S then S || if if bb then then S S else else SS || s s}, S)}, S)

SSrmrm ifif bb then then SS rmrm ifif bb then if b then then if b then SS else else SS rmrm ifif bb thenthen ifif bb thenthen SS else s else s rmrm ifif bb thenthen ifif bb then s elsethen s else s s

S S rmrm if b then if b then SS else else S S rmrm if b then if b then SS else else s s rmrm if b thenif b then if b thenif b then SS else s else s rmrm if b then if b then if b then s else sif b then s else sif b then if b then s else sif b then if b then s else s

Page 53: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

5353

Grammatica Ambigua Grammatica Ambigua EsempioEsempio

Grammaticha ambigua:Grammaticha ambigua:G=({S}, {G=({S}, {ifif,, then then,, else else,, s, b s, b},}, P={S P={S if if bb then S then S || if if bb then then S S else else SS || s s}, }, S)S)

Grammatica disambiguata:Grammatica disambiguata:G=({S, SG=({S, S11, S, S22}, {}, {ifif,, then then,, else else,, s, b s, b},}, P={S P={S S S11, S, S11 if if bb then then SS11 || if if bb then then S S22 else else SS11 || s s,, SS22 if b then S if b then S22 else S else S11 | s}, | s}, S)S)

Page 54: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

5454

Grammatica non ambigua con Grammatica non ambigua con proprietà opportune proprietà opportune

Nota: la gramamtica è context free, e mostriamo Nota: la gramamtica è context free, e mostriamo solo le produzioni.solo le produzioni.

Grammatica di espressioniGrammatica di espressioni non ambiguanon ambigua con con priorità di operatori e associativitàpriorità di operatori e associatività cablatecablate

EEE+T | E-T | TE+T | E-T | TTTT*F | T/F | F T*F | T/F | F FFP^F | PP^F | PP P (E) | I | N(E) | I | NI I a|b|c|d a|b|c|dN N 0 | 1 | 2 0 | 1 | 2

G G per espressioni, per espressioni, semplice masemplice ma ambiguaambiguaEEEOE|(E)|a|b|c|dEOE|(E)|a|b|c|dOO+|-|*|^ +|-|*|^

Page 55: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

5555

Altri esempi di grammaticheAltri esempi di grammatiche

GG00 di espressioni non ambigua con priorità di di espressioni non ambigua con priorità di operatori e associativitàoperatori e associatività cablatecablate

EEE+T | E-T | T E+T | E-T | T |-T|+T|-T|+TTTT*F | T/F | F T*F | T/F | F F F (E) | I | N(E) | I | NI I a|b|c|d a|b|c|dN N 0 | 1 | 2 0 | 1 | 2

GG11 per espressioni, semplice, non ambigua ma per espressioni, semplice, non ambigua ma flatflatEEEOT|TEOT|T|-T|+T|-T|+TT T (E)|a|b|c|d|0|1|2(E)|a|b|c|d|0|1|2OO+|-|*|/ +|-|*|/

Page 56: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

5656

Derivazione canonica di GDerivazione canonica di G00

DataData a-b*c a-b*c ee G G00 abbiamo:abbiamo:

EErmrmEE--TT rmrmEE--TT**FF rmrmEE--TT**II rmrmEE--TT*c *c rmrmEE--FF*c*c rmrmEE--II*c*c rmrmEE-b*c -b*c rmrmTT-b*c-b*c rmrmFF-b*c -b*c rmrmII-b*c-b*c rmrma-b*ca-b*c

EEEE++T | ET | E--T | TT | T |-T|+T|-T|+TTTTT**F | TF | T//F | F F | F F F ((EE) ) | I | N| I | NI I a a || b b || c c | | ddN N 0 0 || 1 1 || 2 2

Page 57: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

5757

Parse tree (GParse tree (G00) )

Derivazione Canonica:Derivazione Canonica:

EErmrmEE--TT rmrmEE--TT**FF rmrmEE--TT**II rmrmEE--TT*c *c rmrmEE--FF*c*c rmrmEE--II*c*c rmrmEE-b*c -b*c rmrmTT-b*c-b*c rmrmFF-b*c -b*c rmrmII-b*c-b*c rmrma-b*ca-b*c

EE

EE -- TT

TT T * F T * F

FF F I F I

II I c I c

aa b b

Page 58: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

5858

Derivazione canonica di Derivazione canonica di GG11

DataData a-b*c a-b*c ee G G11 abbiamo:abbiamo:

EErmrmEOEOTT rmrmEEOOc c rmrmEE*c *c rmrmEOEOTT*c*c rmrmEEOObb**c c rmrm

rmrmEE-b*c -b*c rmrm

rmrmTT-b*c -b*c rmrm a-b*c a-b*c

EEEOT|T|-T|+TEOT|T|-T|+TT T (E)|(E)|aa||bb||cc||dd||00||11||22OO++||--||**||/ /

Page 59: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

5959

Parse tree (GParse tree (G11))

Derivazione Derivazione Canonica:Canonica:

EErmrmEOEOTT rmrmEEOOc c rmrmEE*c *c rmrmEOEOTT*c*c rmrmEEOObb**c c rmrm

rmrmEE-b*c -b*c rmrm

rmrmTT-b*c -b*c rmrm a-b*c a-b*c

EE

E E O O T T

E O TE O T * * c c

T - bT - b

a a

Page 60: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

6060

EsercizioEsercizio

Studiare GStudiare G22::

EEFOT | T FOT | T FFFOT | T | FOT | T | TT((EE)| a )| a || b b || c c || d d || 0 0 || 1 | 2 1 | 2 OO+ + || - - || * * || ^ ^

Page 61: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

6161

EsempioEsempioDocumenti HTML XML:Documenti HTML XML:

DDPs B PdPs B PdPsPs<html><html>PdPd<\html><\html>B B <body>L <\body> <body>L <\body>LLE L | E E L | E | | EE<div>R<\div> <div>R<\div> RRrestrest

Page 62: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

6262

EsempioEsempioDocumenti HTML XML:Documenti HTML XML:

DDPs B PdPs B PdPsPs<html><html>PdPd<\html><\html>B B <body>L <\body> <body>L <\body>LLE L | E E L | E | | EE<div>R<\div> <div>R<\div> RRrestrest

Page 63: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

6363

EsempioEsempioDocumenti HTML XML:Documenti HTML XML:

DDPs B PdPs B PdPsPs<html><html>PdPd<\html><\html>B B <body>L <\body> <body>L <\body>LLE L | E E L | E | | EE<div>R<\div> <div>R<\div> RRrestrest

Page 64: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

6464

EsempioEsempioDocumenti HTML XML:Documenti HTML XML:

DDPs L PdPs L Pd

PsPs<html><html>

PdPd<\html><\html>

LLE L | E E L | E | | EE<div>R<\div> <div>R<\div>

RRrestrest

Page 65: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

6565

Operazioni sui LinguaggiOperazioni sui Linguaggi

Dati due linguaggi L, M Dati due linguaggi L, M * definiamo * definiamo prodotto di L e Mprodotto di L e M, indicato LM o L, indicato LM o L..M, M, l’insieme:l’insieme:

LLM ={uv | u M ={uv | u L & v L & v M} M}

Page 66: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

6666

Operazioni sui LinguaggiOperazioni sui Linguaggi

Definiamo Definiamo chiusura di Kleene di Lchiusura di Kleene di L, , indicata con L*, l’operazione:indicata con L*, l’operazione: LL00={={}} LL11=L=L LLii=L=LLLi-1i-1 i>0 i>0 L*=L*=ii00 L Lii

LL++==i>0i>0 L Lii

Page 67: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

6767

Operazioni sui Linguaggi - Operazioni sui Linguaggi - EsempiEsempi

Proprieta’: supponiamo T terminale e Proprieta’: supponiamo T terminale e vediamo le produzioni di Evediamo le produzioni di E

GG00=({E},{t,+,-},P=({E},{t,+,-},P00,E),E)PP00={E={EE+t | E-t | tE+t | E-t | t|-t|+t}|-t|+t}L(GL(G00)={-t,+t,t}({+,-}t)*)={-t,+t,t}({+,-}t)*eeGG11=({E,O},{t,+,-},P1,E)=({E,O},{t,+,-},P1,E)PP11={E={EEOt|tEOt|t|-t|+t,|-t|+t,OO+|-}+|-}OO+|- +|- L(GL(G11)=L(G)=L(G00))

Page 68: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

6868

Linguaggi - EsempiLinguaggi - Esempi

Esempio di linguaggio inerentemente Esempio di linguaggio inerentemente ambiguoambiguo L={aL={aiibbjjcckk| i=j OR j=k; i,j,k| i=j OR j=k; i,j,k0}0} SSSS11SS22 | S | S33SS44

SS11aSaS11b |b | S S22 S S22 c| c| SS44bSbS44c |c | S S33 S S33 a| a|

Esempio di linguaggio non context Esempio di linguaggio non context free.free. L={aL={annbbnnccnn| n>(| n>() 0} non e’ un CFL ) 0} non e’ un CFL

Page 69: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

6969

Syntax Tree (albero Syntax Tree (albero sintattico) e Parsing Tree sintattico) e Parsing Tree

Albero SintatticoAlbero Sintattico Una delle rappresentazioni intermedie più usate. Più astratto del parsing Una delle rappresentazioni intermedie più usate. Più astratto del parsing

tree,tree,

dipende solo dal linguaggio (non dalla grammatica)dipende solo dal linguaggio (non dalla grammatica)

Page 70: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

7070

EBNFEBNFUsa i simboli metalinguistici “=“ “|” “[“ “]” “{“. “}” “.” “”” Usa i simboli metalinguistici “=“ “|” “[“ “]” “{“. “}” “.” “”” […] significa opzionalita’[…] significa opzionalita’{…} significa ripetizione: 0 o piu’ volte{…} significa ripetizione: 0 o piu’ volte““(…)” significa raggruppamento(…)” significa raggruppamento““|” indica alternativa “.” termina una produzione|” indica alternativa “.” termina una produzioneI simboli terminali vengono racchiusi tra “ “I simboli terminali vengono racchiusi tra “ “EsempioEsempioExpression = SimpleExpression [ Relation SimpleExpression ].Expression = SimpleExpression [ Relation SimpleExpression ].Relation = "=" | "<>" | "<" | "<=" | ">" | ">=" | "IN".Relation = "=" | "<>" | "<" | "<=" | ">" | ">=" | "IN".SimpleExpression = [ "+" | "-" ] Term { AddOperator Term }.SimpleExpression = [ "+" | "-" ] Term { AddOperator Term }.AddOperator = "+" | "-" | "OR".AddOperator = "+" | "-" | "OR".Term = Factor { MulOperator Factor }.Term = Factor { MulOperator Factor }.MulOperator = "*" | "/" | "DIV"| "MOD" | "AND"MulOperator = "*" | "/" | "DIV"| "MOD" | "AND"

Page 71: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

7171

EBNF Esempio (Espressioni) EBNF Esempio (Espressioni)

Expression = SimpleExpression [ Relation Expression = SimpleExpression [ Relation SimpleExpression ].SimpleExpression ].

Relation = "=" | "<>" | "<" | "<=" | ">" | ">=" | "IN".Relation = "=" | "<>" | "<" | "<=" | ">" | ">=" | "IN".

SimpleExpression = [ "+" | "-" ] Term { AddOperator SimpleExpression = [ "+" | "-" ] Term { AddOperator Term }.Term }.

AddOperator = "+" | "-" | "OR".AddOperator = "+" | "-" | "OR".

Term = Factor { MulOperator Factor }.Term = Factor { MulOperator Factor }.

MulOperator = "*" | "/" | "DIV" | "MOD" | "AND"MulOperator = "*" | "/" | "DIV" | "MOD" | "AND"

Page 72: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

7272

EBNF Espressioni (cont.) EBNF Espressioni (cont.) Designator [ ActualParameters ] | "(" Expression ")" | NOT Factor.Designator [ ActualParameters ] | "(" Expression ")" | NOT Factor.

Set = "[" [ Element { "," Element } ] "]".Set = "[" [ Element { "," Element } ] "]".

Element = OrdinalConstant [ ".." OrdinalConstant].Element = OrdinalConstant [ ".." OrdinalConstant].

OrdinalConstant= Char | Integer.OrdinalConstant= Char | Integer.

ActualParameters = ["(" [ ExpressionList ] ")"].ActualParameters = ["(" [ ExpressionList ] ")"].

Ident = IdChar { IdChar | Digit }.Ident = IdChar { IdChar | Digit }.

IdChar = Letter | "_".IdChar = Letter | "_".

Number = Integer | Real.Number = Integer | Real.

Page 73: Implementazione di Linguaggi 2 Massimo Ancona Testo: A.V. Aho, R. Sethi, J.D.Ullman Compilers Principles,Techniques and Tools, Addison Wesley.

7373

EBNF Espressioni (cont. 2) EBNF Espressioni (cont. 2) Integer = Digit { Digit } | Digit { HexDigit } "H".Integer = Digit { Digit } | Digit { HexDigit } "H".

Real = Digit { Digit } "." { Digit } [ ScaleFactor ].Real = Digit { Digit } "." { Digit } [ ScaleFactor ].

ScaleFactor = "E" [ "+" | "-" ] Digit { Digit }.ScaleFactor = "E" [ "+" | "-" ] Digit { Digit }.

HexDigit = Digit | "A" | "B" | "C" | "D" | "E" | "F".HexDigit = Digit | "A" | "B" | "C" | "D" | "E" | "F".

Digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9".Digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9".

CharConstant = "'" Char "'" | Digit { HexDigit } "X".CharConstant = "'" Char "'" | Digit { HexDigit } "X".

String = ' { CharN | "''" } '.String = ' { CharN | "''" } '.

Char = CharN | "'".Char = CharN | "'".