Analisi sintattica. Syntax Analysis. albero. sintattico. parser. scanner. Errori sintattici
|
|
- Alberto Testa
- 6 anni fa
- Visualizzazioni
Transcript
1 Analisi sintattica Syntax Analysis albero programma scanner tokens parser sintattico rrori sintattici Un parser deve riconoscere la struttura di una stringa di ingresso, la cui struttura è fornita in termini di regole di produzione di una CFG, BNF, o diagrammi sintattici. Un parser è una macchina astratta che raggruppa input in accordo con regole grammaticali.
2 Sintassi La sintassi è costituita da un insieme di regole che definiscono le frasi formalmente corrette e allo stesso tempo permettono di assegnare ad esse una struttura (albero sintattico) che ne indica la decomposizione nei costituenti immediati. Ad es. la struttura di una frase (ovvero di un programma) di un linguaggio programmativo ha come costituenti le parti dichiarative e quelle esecutive. Le parti dichiarative definiscono i dati usati dal programma. Le parti esecutive si articolano nelle istruzioni, che possono essere di vari tipi: assegnamenti, istruzioni condizionali, frasi di lettura, ecc. I costituenti del livello più basso sono gli elementi lessicali già considerati, che dalla sintassi sono visti come atomi indecomponibili. Infatti la loro definizione spetta al livello lessicale. Sintassi La teoria formale dei linguaggi offre diversi modelli, ma nella quasi totalità dei casi il tipo di sintassi adottata è quello noto come sintassi libera o non-contestuale (context-free) che corrisponde al tipo 2 della gerarchia di Chomsky. I metodi sintattici per il trattamento del linguaggio sono semplici ed efficienti: la definizione del linguaggio attraverso le regole delle sintassi libere è diretta ed intuitiva; gli algoritmi deterministici di riconoscimento delle frasi sono veloci (hanno complessità lineare) e facili da realizzare partendo dalla sintassi. Tutti questi vantaggi hanno imposto le sintassi libere come l unico metodo pratico per definire formalmente la struttura di un linguaggio.
3 Sintassi Ma quello che si può ottenere con una sintassi libera è limitato e spesso insufficiente; la sintassi non basta a definire le frasi corrette del linguaggio di programmazione, perché una stringa sintatticamente corretta non è detto che lo sia in assoluto; infatti essa potrebbe violare altre condizioni non esprimibile nel modello noncontestuale. Ad esempio è noto che la sintassi non può esprimere le seguente condizioni: in un programma ogni identificatore di variabile deve comparire in una dichiarazione; il tipo del parametro attuale di un sottoprogramma deve essere compatibile con quello del parametro formale corrispondente. Sintassi Un altro limite del modello sintattico libero tocca le esigenze di calcolo della traduzione. Se si guardano le traduzioni definibili con i soli metodi sintattici, esse sono decisamente povere inadeguate ai problemi reali (compilazione di un linguaggio programmativo nel linguaggio macchina) Da queste critiche sarebbe sbagliato concludere che i metodi sintattici sono inutili: al contrario essi sono indispensabili come supporto (concettuale e progettuale) su cui poggiare i più completi strumenti della semantica.
4 Parser Il parser lavora con stringhe di tokens source program Lexical Analyze r token get next token Parser parse tree sempio: Consideriamo l analisi della frase * 3 secondo la seguente grammatica Parser <expr> ::= <expr> + <expr> <expr> * <expr> L analisi sintattica può essere vista come un number processo per costruire gli alberi sintattici (parse tree). The syntax of a programming is described by a context-free grammar (CFG). We will use BNF (Backus-Naur Form) notation in the description of CFGs. Il parser verifica se un programma sorgente soddisfa le regole implicate da una grammatica context-free o no. Se le soddisfa, il parser crea l albero sintattico (del programma Altrimenti genera un messaggio di errore. Una grammatica non contestuale Da una specifica rigorosa della sintassi dei linguaggi di programmazione Il progetto della grammatica e la fase iniziale del progetto del compilatore sistono strumenti automatici per costruire automaticamente il compilatore dalla grammatica
5 Parser Due differenti metodi di analisi sintattica top-down: l albero sintattico è creato dalla radice alle foglie bottom-up: l albero sintattico è creato dalle foglie alla radice Il parser può lavorare in una varietà di modi ma esso tipicamente processa l input da sinistra a destra. Parser sia top-down che bottom-up possono essere implmentati in modo efficente solo per alcune sottoclassi di gramatiche context-free: LL per top-down LR per bottom-up Una left-most (right-most) derivation è una derivazione nella quale durante ogni passo solo il non-terminale più a sinistra 8destra) è sostituito. Grammatiche di tipo Context-Free Le strutture ricorsive presenti nei linguaggi di programmazione sono definite da una grammatica context-free. In una grammatica context-free grammar, noi abbiamo: Un insieme finito di terminali T (l insieme dei tokens) Un insieme finito di no terminali V(variabili sintattiche) Un insieme finito di produzioni nella forma A α dove A V e α (V T)* Un start symbol (uno dei non-terminal) sempio T = { (, ), id, +, *, /, -} V = {} + * / - ( ) id
6 Derivazioni + + deriva da Possiamo sostituire con by + Perr poter fare questo deve esistere una produzione + nella grammatica. + id+ id+id Una sequenza di sostituzioni di non-terminali e chiamata una derivazione di id+id da. In generale un passo di derivazione è αaβ αγβ se A γ in G α (V T)* e β (V T)* α 1 α 2... α n (α n deriva da α 1 o α 1 èderivatodaα n ) one step * zero o più steps + 1 o più steps Le produzioni devono avere le seguenti proprietà: no produzioni inutili o ridondanti (i.e., A A), no non-terminals senza produzioni (e.g., A Ba dove B non è definito), no cicli infiniti (e.g., A Aa senza altre produzioni per A), no ambiguita : una grammatica con più alberi sintattici per la stessa espressione è ambigua descrivere correttamente il linguaggio.
7 CFG - Terminologia L(G) è il linguaggio generato da G. Una frase di L(G) è una stringa di simboli terminali di G. Se S è l assioma o + start symbol di G allora ω è una frase di L(G) iff S ω dove ω T*. Se G è una grammatica context-free, L(G) è un linguaggio context-free. Due grammatiche sono equivalenti se producono lo stesso * linguaggio. S α Se α contiene non-terminali, è chiamata forma di frase di G. Se α non contiene no-terminali è chiamata frase di G. Left-Most and Right-Most Derivations Left-Most Derivation lm lm lm lm lm - -() -(+) -(id+) -(id+id) Right-Most Derivation rm rm rm rm rm - -() -(+) -(+id) -(id+id) top-down parser cerca una left-most derivation del programma sorgente bottom-up parser cerca una right-most derivation del programma sorgente
8 Parse Tree Inner nodes dell albero sintattico sono simboli non-terminal, le foglie simboli terminali () - -(+) - ( ) ( ) -(id+) - ( ) -(id+id) - ( ) id id id Un albero sintattico è una rappresentazione grafica di una derivazione. Ambiguita Una grammatica è ambigua se esistono più alberi sintattici per la stessa frase. + id+ id+* id+id* id+id*id + id id * id * +* id+* id+id* id+id*id * + id id id
9 Per poter costruire un parser la grammatica non deve essere ambigua Grammatica non ambigua unica selezione nell albero sintattico per una frase Le ambiguità nella grammatica devono essere eliminate durante il progetto di un compilatore Ambiguità stmt if expr then stmt if expr then stmt else stmt otherstmts if 1 then if 2 then S 1 else S 2 stmt if expr then stmt else stmt 1 if expr then stmt S 2 stmt if expr then stmt 1 if expr then stmt else st 2 S S 1 S
10 Ambiguità Noi preferiamo il secondo albero sintattico (else corrisponde al if più vicino). Dobbiamo eliminare l ambiguità con tale obbiettivo La grammatica non-ambigua sarà: stmt matchedstmt unmatchedstmt matchedstmt if expr then matchedstmt else matchedstmt otherstmts unmatchedstmt if expr then stmt if expr then matchedstmt else unmatchedstmt Ambiguita Precedenza degli operatori Grammatiche ambigue possono essere rese non-ambigue in accordo alle precedenze degli operatori e alle regole di associativià degli operatori. + * ^ id () +T T T T*F F F G^F G G id () precedenze: ^ (right to left) * (left to right) + (left to right)
11 Ricorsione sinistra (Left Recursion) Una grammatica è left recursive se ha un non + terminale A tale che A Aα per qualche stringa α Le tecniche di parser Top-down non possono gestire grammatiche left-recursive. Una grammatica left-recursive deve esssere convertita in una non left-recursive. La ricorsione sinistra può comparire in un singolo passo della derivazione (immediate left-recursion), o può comparire in più che un passo. Immediate Left-Recursion A A α β dove β Aγ e γ (V T)* A βa A αa ε grammatica equivalente In generale A A α 1... A α m β 1... β n dove β i Aγ e γ (V T)* A β 1 A... β n A A α 1 A... α m A ε grammatica equivalente
12 sempio +T T T T*F F F id () T +T ε T F T T *F T ε F id () eliminate immediate left recursion Left-Recursion Problema!! Una grammatica che non e direttamente left-recursive, ma lo è in modo indirettp. Anche in questo caso va eliminata la ricorsione sinistra sempio S Aa b A Sc d S Aa Sca A Sc Aac
13 Algoritmo per l eliminazione della ricorsione sinistra - Ordinare I non-terminali A 1... A n -for i from 1 to n do { - for j from 1 to i-1 do { sostituire ogni produzione A i A j γ con A i α 1 γ... α k γ } dove A j α 1... α k } - eliminare la ricorsione sinistra nelle produzioni di A i sempio S Aa b A Ac Sd f - Ordinare I non-terminali: S, A per S: - non c e una ricorsione sinistra diretta. for A: - sostituiamo A Sd con A Aad bd Cosi avremoa Ac Aad bd f - liminiamo la ricorsione sinistra in A A bda fa A ca ada ε Avremo la grammatica non ricorsiva equivalente: S Aa b A bda fa A ca ada ε
14 sempio S Aa b A Ac Sd f - Ordinare I non-terminali : A, S per A: liminamo la ricorsione sinistra in A A SdA fa A ca ε per S: - Sostituiamo S Aa with S SdA a fa a Così avremo S SdA a fa a b - liminamo la ricorsione sinistra in S S fa as bs S da as ε Avremo la grammatica non ricorsiva equivalente: S fa as bs S da as ε A SdA fa A ca ε Left-Factoring (fattorizzazione sinistra) Un parser predittivo richiede una grammatica leftfactored. grammatica grammatica equivalente stmt if expr then stmt else stmt if expr then stmt
15 Left-Factoring (cont.) In generale, A αβ 1 αβ 2 dove α (V T)* - {ε}, β 1 (V T)* - {ε}, β 2 (V T)* - {ε} e β 1. Noi possiamo riscrivere la grammatica come segue A αa A β 1 β 2 Algoritmo Per ogni non-terminale A con due o più alternative (produzioni) con una parte non vuota comune A αβ 1... αβ n γ 1... γ m diventa A αa γ 1... γ m A β 1... β n
16 sempio A abb ab cdg cdeb cdfb A aa cdg cdeb cdfb A bb B A aa cda A bb B A g eb fb sempio A ad a ab abc b A aa b A d ε b bc A aa b A d ε ba A ε c
17 Le frasi possono essere analizzate da sinistra a destra (L parser), possono essere costruite con derivazioni left-most (LL(k) parser) o right-most (LR(k) parser) utilizzando k symboli di lookahead! LL è più conosciuta come top-down parser. LR è più conosciuta come bottom-up parser. Per ragioni pratiche k deve essere piccolo. Per un compilatore è auspicabile l uso di grammatiche che possono essere analizzate in modo deterministico con al più k symboli di lookahead. L assenza di ambiguità è condizione necessaria per un analisi determinstica Consideriamo un bottom up parse per abbcde generato dalla seguente grammatica con assioma S, eseguento un approccio left-most matches First. S aacbe A Ab b B d
18 abbcde aabcbe aacbe S applicando B d applicando A b applicando A Ab applicando S aacbe A 2 S 4 A 1 B 3 a b b c d e Definzione di First(α) Data una grammatica non contestuale G(V,T,P,S) si definisce First(α) il seguente sottoinsieme di T: se α = aβ con a T allora a First(α) se α = Aβ con A T allora se una produzione A γallora First(γ) First(α) se una produzione A εallora First(β) First(α) First(α) è l insieme di tutti i terminali con cui può iniziare una stringa derivata da α. Se α *ε allora ε First(α). First(α) = {a T α * a β} if a *ε then {ε} else
19 sempio T = {a, b, c, d, e}, V = {S, B, C} P = { S ase B, B bbe C, C cce d } S = S First(aSe) = {a} First(B) = First(bBe) First(C) = {b} First(cCe) First(d) = {b} {c} {d} = {b, c, d} First(bBe) = {b} First(C) = First(cCe) First(d) = {c} {d} = {c, d} First(cCe) = {c} First(d) = {d} sempio T = {a, b, c, d, e} V = {A, B, C, D} P = { A B Ce a B bc, C Dc D d ε} S = A First(B) = First(b) ={b} First(C e) = First (Dc) = First(d) First(ε) = {d} {ε} = {d, ε } First(a) = {a} First(bC )= {b} First(Dc) = First(d) First(ε) = {d} {ε} = {d, ε } First(d) = {d} First(ε )= {ε }
20 sempio T = {(, +, ), v, f} V = {, Prefix, Tail} P = { Prefix() v Tail Prefix f ε Tail + ε } S = First(Prefix() ) = {f} {ε} First(v Tail) = {v} First(f) = {f} First(ε )= {ε} First(+) = {+} sempio T = {a, (, ), +, ","} V = {, T, L, P} P = { + T T T a () a(l) L P ε, P P "," } S = First() = {a, (} First(T) = {a, (} First(L) = {ε, a, (} First(P) = {a, (} T = {a, b, c, d, e} V = {A, B, C, D} P = { A B C Ce a B bc C Dc D D d ε } S = A First(A) = {a, b, d, c, e, ε } First(B) = {b} First(C) = {d, c, ε } First(D) = {d, ε }
21 Definizione di Follow(A) Data una grammatica non contestuale G(V,T,P,S) si definisce Follow(A) l insieme dei terminali che seguono in una qualsiasi frase. sso è definito come segue: Follow(A) = {a T S + Aa.} (if S * A then {ε} else } T = {a, b, c, d, e}, V = {S, B, C} P = { S ase B, B bbe C, C cce d } S = S Follow(S) = {e, $} Follow(B) = {e, $} Follow(C) = {e, $} T = {a, (, ), +, ","} V = {, T, L, P} P = { + T T T a () a(l) L P ε, P P "," } S = Follow() = {+, ),,, $} Follow(T) = {+, ),,, $} Follow(L) = { ) } Follow(P) = {),, }
22 T = {(, +, ), v, f} V = {, Prefix, Tail} P = { Prefix() v Tail Prefix f ε Tail + ε } S = Follow(Prefix ) = { ( } Follow() = {$} Follow(Tail) = { $ } T = {a, b, c, d, e} V = {A, B, C, D} P = { A B Ce a B bc, C Dc D d ε} S = A Follow(A) = {$} Follow(B) = {$} Follow(C) = {$, e} Follow(D) = {c} T = {a, b, c, d, e} V = {A, B, C, D} P = { A B C Ce a B bc C Dc D D d ε } S = A Follow(A) = {$} Follow(B) = Follow(A) = {$} Follow(C) = Follow(A) Follow(B) {e} = {e, $} Follow(D) = {c } Follow(C) = {c, e, $}
albero sintattico parser scanner Errori sintattici
albero programma scanner tokens parser sintattico rrori sintattici Un parser deve riconoscere la struttura di una stringa di ingresso, la cui struttura è fornita in termini di regole di produzione di una
DettagliAnalisi sintattica. Analisi sintattica. albero. sintattico. parser. scanner. Errori sintattici
Analisi sintattica Analisi sintattica albero programma scanner tokens parser sintattico rrori sintattici Un parser deve riconoscere la struttura di una stringa di ingresso, la cui struttura è fornita in
DettagliParser top-down. Top-Down Parsing
Parser top-down Top-Down Parsing Il parse tree è creato dalla radice alle foglie. Il parser puo essere realizzato Recursive-Descent Parsing Il Backtracking è necessario (se una scelta di una regola non
DettagliGrammatiche context-free
Corso di Laurea Magistrale in Ingegneria Informatica A.A. 2013-2014 Linguaggi Formali e Compilatori Grammatiche context-free Giacomo PISCITELLI Politecnico di Bari G. Piscitelli pag. 1 di 28 Grammatiche
DettagliLinguaggi Liberi dal Contesto. Linguaggi Liberi dal Contesto
rammatiche e Linguaggi Liberi da Contesto Abbiamo visto che molti linguaggi non sono regolari. Consideriamo allora una classe piu ampia di linguaggi, i Linguaggi Liberi da Contesto (CFL) i CFL sono stati
DettagliLinguaggi formali e compilazione
Linguaggi formali e compilazione Corso di Laurea in Informatica A.A. 2014/2015 L input per il parser Nel contesto della compilazione l input per il parser è costituito da una stringa di token (che indicheremo
DettagliAnalisi 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
DettagliLinguaggi context free. Analizzatori sintattici e alberi di analisi
Linguaggi context free Analizzatori sintattici e alberi di analisi ( ) * id + id id 2 Grammatiche Context Free Una grammatica CF ha produzioni del tipo X α con X N e α (T N)* sono libere dal contesto perché
Dettagli1. Calcolare FIRST e FOLLOW dei simboli non terminali della seguente grammatica:
Esercitazione V I GRAMMATICHE LL(1) 1. Calcolare FIRST e FOLLOW dei simboli non terminali della seguente grammatica: P begin L end L ST T ST ε S id := E; read ( id ) ; write ( E ) ; E FG G + FG ε F (E)
DettagliProprietà dei linguaggi non contestuali
Proprietà dei linguaggi non contestuali Argomenti della lezione Pumping lemma per i linguaggi non contestuali Proprietà di chiusura Argomenti della lezione Grammatiche non contestuali in forma ridotta
DettagliGrammatiche. Rosario Culmone, Luca Tesei. 20/11/2006 UNICAM - p. 1/49
Grammatiche Rosario Culmone, Luca Tesei 20/11/2006 UNICAM - p. 1/49 Grammatiche libere dal contesto Ogni linguaggio di programmazione ha delle regole che prescrivono la struttura sintattica dei programmi
DettagliLinguaggi 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
DettagliLinguaggi 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
DettagliEspressività e limitazioni delle grammatiche regolari
Espressività e limitazioni delle grammatiche regolari Vantaggi: Le grammatiche regolari consentono di esprimere una significativa classe di linguaggi: linguaggi con un numero di sequenze infinito grazie
Dettagli1. Calcolare FIRST e FOLLOW dei simboli non terminali della seguente grammatica:
Esercitazione V I I GRAMMATICHE LL(1) 1. Calcolare FIRST e FOLLOW dei simboli non terminali della seguente grammatica: P begin L end L ST T ST ε S id := E; read ( id ) ; write ( E ) ; E FG G + FG ε F (E)
DettagliAutoma deterministico con prospezione 1. < {q}, Σ, Σ V, δ, q, S, Φ > δ(a, X) = α R. se a Gui(X α) senza spostamento della testina.
Automa deterministico con prospezione 1 < {q}, Σ, Σ V, δ, q, S, Φ > δ(a, X) = α R δ(a, a) = ε se a Gui(X α) senza spostamento della testina con spostamento della testina Grammatica 1S ( S ) 2S [ S ] 3S
DettagliPumping lemma per i linguaggi Context-free
Pumping lemma per i linguaggi Context-free Sia L un linguaggio context-free. E possibile determinare una costante k, dipendente da L, tale che qualunque stringa z! L con z > k si può esprimere come z=
DettagliDispensa 1. Da un punto di vista logico l architettura di un compilatore si può suddividere in due parti: Analisi e Sintesi.
Dispensa 1 1. Introduzione ai compilatori Compilatore Un compilatore è un programma che legge un programma scritto in un linguaggio (sorgente) e lo traduce in un programma equivalente in un altro linguaggio
DettagliAnalizzatore 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,
DettagliGrammatiche Parse trees Lezione del 17/10/2012
Fondamenti di Programmazione A.A. 2012-2013 Grammatiche Parse trees Lezione del 17/10/2012 AUTILI MARCO http://www.di.univaq.it/marco.autili/ Riassunto lezione precedente Sintassi vs Semantica Stringhe,
DettagliPROLOG E ANALISI SINTATTICA DEI LINGUAGGI Quando si vuole definire in modo preciso la sintassi di un linguaggio si ricorre a una grammatica G=(V n,v t
PROLOG E ANALISI SINTATTICA DEI LINGUAGGI Quando si vuole definire in modo preciso la sintassi di un linguaggio si ricorre a una grammatica Una grammatica permette di stabilire se una sequenza di simboli
DettagliLINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware
LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 LINGUAGGI DI ALTO LIVELLO Barriera di astrazione Fortran Cobol Basic Pascal Python C
DettagliLINGUAGGI DI ALTO LIVELLO
LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 LINGUAGGI DI ALTO LIVELLO Barriera di astrazione C Fortran Modula-2 Cobol Algol Basic
DettagliLINGUAGGI CONTEXT FREE. Lezione Lezione
LINGUAGGI CONTEXT FREE Lezione 25-11-2010 Lezione 30-11-2010 2 INTRODUZIONE GERARCHIA DI CHOMSKY 3 4 DEFINIZIONE DEI LINGUAGGI CONTEXT FREE LINGUAGGI CF I linguaggi di tipo 2 sono detti context free (CF)
DettagliRiconoscitori 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
DettagliContenuti del corso. Parsing: esempio. Cosa aggiungiamo in questo corso. Parsing. Data una grammatica: E T T + E
Continuazione del corso di linguaggi. Nuovi paradigmi di computazione logico: Prolog logic - funzionale: Curry Teoria base dei compilatori parsing grammatiche ad attributi type checking generazione codice
DettagliTraduttore diretto dalla sintassi (seconda parte) Giuseppe Morelli
Traduttore diretto dalla sintassi (seconda parte) Giuseppe Morelli Traduzione di linguaggi guidata da Grammatiche Context Free La traduzione diretta della sintassi avviene associando regole e/o frammenti
Dettagliacuradi Luca Cabibbo e Walter Didimo Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 1
acuradi Luca Cabibbo e Walter Didimo Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 1 richiami teorici sulle grammatiche di Chomsky esercizivari esercizi su grammatiche ed espressioni regolari
DettagliGrammatiche. Grammatiche libere da contesto Grammatiche regolari Potenza delle grammatiche libere e regolari Struttura di frase: Alberi di derivazione
Grammatiche Grammatiche libere da contesto Grammatiche regolari Potenza delle grammatiche libere e regolari Struttura di frase: Alberi di derivazione Esempio dei numeri interi Si consideri il linguaggio
DettagliLinguaggi 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
DettagliLINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware
LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 Un po di storia sui linguaggi 1957 John Backus e colleghi della IBM rilasciano la prima
DettagliParser 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
DettagliParte n.4 Linguaggi: Gerarchia ed Operazioni
Linguaggi di Programmazione Corso C Parte n.4 Linguaggi: Gerarchia ed Operazioni Nicola Fanizzi (fanizzi@di.uniba.it) Dipartimento di Informatica Università degli Studi di Bari Gerarchia di Chomsky Sia
DettagliFondamenti 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
DettagliForme Normali. Forma normale di Chomsky. E caratterizzata da regole di due tipi. A! BC dove A, B, C $ V N A! a con a $ V T. Forma normale di Greibach
Forme Normali A partire da una grammatica Context-free G è sempre possibile costruire una grammatica equivalente G ovvero L(G) = L(G ) che abbiano le produzioni in forme particolari, dette forme normali.
DettagliLinguaggi di Programmazione
Linguaggi di Programmazione 1 Linguaggio naturale e linguaggio macchina La comunicazione uomo-macchina avviene attraverso formalismi che assumono la forma di un linguaggio. Caratteristiche del Linguaggio
DettagliFasi 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
DettagliQuiz sui linguaggi CF
Fondamenti dell Informatica 1 semestre Quiz sui linguaggi CF Prof. Giorgio Gambosi a.a. 2014-2015 Problema 1: Si consideri la seguente grammatica context free G, dove S, NP, V P, P P, A sono i simboli
DettagliCorso di Linguaggi e Traduttori 1 AA GRAMMATICHE
Corso di Linguaggi e Traduttori 1 AA 2004-05 GRAMMATICHE 1 Definizione di Grammatica Formalmente definiamo un grammatica G mediante una quadrupla V, V, P S ( ) N T, dove: V N e l insieme dei simboli non
DettagliForma Normale di Chomsky
2. Eliminazione delle produzioni unitarie Forma Normale di Chomsky Una produzione si dice unitaria se è della forma A! B. Le produzioni unitarie in pratica consistono in una ridenominazione di variabili,
DettagliDefinizione di Grammatica
Corso di Linguaggi e Traduttori 1 AA 2004-05 GRAMMATICHE 1 Definizione di Grammatica Formalmente definiamo un grammatica G mediante una quadrupla ( VN, VT, P, S ) dove: V N e l insieme dei simboli non
DettagliDall algoritmo al calcolatore: concetti introduttivi. Fondamenti di Programmazione
Dall algoritmo al calcolatore: concetti introduttivi Fondamenti di Programmazione Algoritmo Problema o compito Preparazione di una torta Programmazione del VCR MCD tra due numeri Algoritmo sequenza precisa
DettagliYet 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
DettagliVerificare 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
DettagliDefinizioni 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
DettagliLinguaggi di alto livello. Barriera di astrazione. Pascal. Cobol. Fortran. Basic. Modula-2. Lisp. Simula67 Scheme. Smalltalk C++ Prolog AN
Linguaggi di alto livello Barriera di astrazione C Fortran Modula-2 Cobol Basic Pascal Algol Ada Lisp Smalltalk Simula67 Scheme C++ Prolog ML AN - 1995 Linguaggi di alto livello IMPERATIVI Fortran Cobol
DettagliUnità Didattica 2 I Linguaggi di Programmazione
Unità Didattica 2 I Linguaggi di Programmazione 1 Linguaggio naturale e linguaggio macchina La comunicazione uomo-macchina avviene attraverso formalismi che assumono la forma di un linguaggio. Caratteristiche
Dettaglia cura di Luca Cabibbo e Walter Didimo
a cura di Luca Cabibbo e Walter Didimo Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 1 automi a pila automi a pila e grammatiche non contestuali notazioni sul livello degli esercizi: (*)
DettagliLe grammatiche formali
Le grammatiche formali Il carattere generativo dei sistemi linguisticii i Consideriamo i la seguente frase: Un gatto rincorre il topo Non facciamo difficoltà a riconoscere che si tratta di una frase sintatticamente
DettagliCorso di Programmazione Linguaggi di Programmazione
Corso di Programmazione Linguaggi di Programmazione Dott. Stefano Ferilli ferilli@di.uniba.it Università degli Studi di Bari Dipartimento di Informatica Linguaggio Insieme di sequenze di simboli appartenenti
DettagliC++ Barriera di astrazione. Barriera di astrazione. Basic. Basic. Lisp. Lisp. Pascal. Prolog. Pascal. Prolog. Cobol. Fortran IMPERATIVI FUNZIONALI
Linguaggi di alto livello Barriera di astrazione C Fortran Cobol Modula-2 Basic Pascal Algol Ada Lisp Smalltalk Simula67 Scheme C++ Prolog ML AN - 1995 Linguaggi di alto livello IMPERATIVI C Fortran Modula-2
DettagliCorso di Fondamenti di Informatica Linguaggi di Programmazione
di Cassino e del Lazio Meridionale Corso di Informatica Linguaggi di Programmazione Anno Accademico 2014/2015 Francesco Tortorella Linguaggi di programmazione Un calcolatore basato sul modello di von Neumann
DettagliAutomi e Linguaggi Formali Automi a stack (Pushdown automata)
Automi e Linguaggi Formali Automi a stack (Pushdown automata) A.A. 2014-2015 Enrico Mezzetti emezzett@math.unipd.it Automi a stack Un Pushdown Automata (PDA) o Automa a stack Essenzialmente un ɛ-nfa con
DettagliCorso di Programmazione Linguaggi di Programmazione. Linguaggio. Messaggio
Materiale didattico preparato dal dott. Stefano Ferilli Corso di Programmazione Linguaggi di Programmazione Dott. Pasquale Lops lops@di.uniba.it Università degli Studi di Bari Dipartimento di Informatica
DettagliI Linguaggi di Programmazione
I Linguaggi di Programmazione 1 Linguaggio naturale e linguaggio macchina La comunicazione uomo-macchina avviene attraverso formalismi che assumono la forma di un linguaggio. Caratteristiche del Linguaggio
DettagliSemantica e traduzione guidata dalla sintassi (cenni)
Corso di Laurea Magistrale in Ingegneria Informatica A.A. 2013-2014 Linguaggi Formali e Compilatori Semantica e traduzione guidata dalla sintassi (cenni) Giacomo PISCITELLI Compile-time semantic evaluation
DettagliDispensa 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)
Dettagli7. Automi a Pila e Grammatiche Libere
(fanizzi@di.uniba.it) Dipartimento di Informatica Università degli Studi di Bari 20 aprile 2016 1 Automi a Pila Definizione Descrizioni Istantanee Condizioni di Accettazione per PDA Esempi 2 Teorema delle
DettagliLINGUAGGI DI ALTO LIVELLO
LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware Linguaggi di alto livello Barriera di astrazione C Fortran Modula-2 Cobol Algol Basic Ada
DettagliParser bottom-up. Esempio. V = {S, A, B, C} T = {a, b, d, e} P = { S aa R1 A BaA R2 A e R3 B ac R4 B AdC R5
Parser bottom-up Esempio V = {S, A, B, C} T = {a, b, d, e} P = { S aa R1 A BaA R2 A e R3 B ac R4 B AdC R5 C b R6 Come costruire l albero sintattico di aedbae in modo bottom-up? 1 Esempio aedbae aedbaa
DettagliLinguaggi Regolari e Linguaggi Liberi
Linguaggi Regolari e Linguaggi Liberi Linguaggi regolari Potere espressivo degli automi Costruzione di una grammatica equivalente a un automa Grammatiche regolari Potere espressivo delle grammatiche 1
DettagliTraduzione 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:
DettagliCorso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 09 Linguaggi Sintassi e Semantica Alfonso Miola Ottobre 2009 http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica
DettagliDescrizione dei Linguaggi di Programmazione
Descrizione dei Linguaggi di Programmazione Nicola Fanizzi Dipartimento di Informatica Università degli Studi di Bari Linguaggi di Programmazione [010194] 4 mar, 2016 Sommario 1 Livelli di Descrizione
DettagliCostruzione dell insieme dei Follow
Costruzione dell insieme dei Follow E! T E - T E E! + T E - T E " T! F T T! *F T " F! (E) i Per evitare che alcuni insiemi siano vuoti si aggiunge per default il simbolo speciale $ che demarca la fine
DettagliAutomi e Linguaggi Formali
E-mail: frossi@math.unipd.it rario e ricevimento Orario: Lunedi, Martedi, Mercoledi, Giovedi 13:30-15:30 LUM250 Crediti: 8 crediti formativi, circa 64 ore di lezione Ricevimento: Martedi 11:00-13:00, studio
DettagliLinguaggi di Programmazione Corso C. Parte n.3 Linguaggi Liberi da Contesto e Linguaggi Contestuali. Nicola Fanizzi
Linguaggi di Programmazione Corso C Parte n.3 Linguaggi Liberi da Contesto e Linguaggi Contestuali Nicola Fanizzi (fanizzi@di.uniba.it) Dipartimento di Informatica Università degli Studi di Bari Grammatiche
DettagliCorso di Linguaggi di Programmazione
Corso di Linguaggi di Programmazione Lezione 12 Alberto Ceselli alberto.ceselli@unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 03 Maggio 2010 Riassunto delle puntate
DettagliGRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONE. Cosimo Laneve
GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONE Cosimo Laneve 1 argomenti 1. linguaggi di programmazione 2. definizione formale di insiemi infiniti 3. la grammatica e la notazione BNF 4. notazioni alternative
DettagliEspressioni aritmetiche
Espressioni aritmetiche Consideriamo espressioni costruite a partire da variabili e costanti intere mediante applicazione delle operazioni di somma, sottrazione, prodotto e divisione (intera). Ad esempio:
DettagliEspressioni Regolari
Espressioni Regolari Le espressioni regolari sono costituite dalle stringhe sull alfabeto Σ = Σ {+,,*,(,),φ} ottenute secondo le seguenti regole: 1. φ e ciascun membro di Σ sono Epressioni Regolari 2.
DettagliUn po di storia sui linguaggi
LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 Un po di storia sui linguaggi 1957 John Backus e colleghi della IBM rilasciano la prima
DettagliLinguaggi per il Web
Sapienza Università di Roma Corso di Laurea in Ingegneria Informatica e Automatica Corso di Laurea in Ingegneria dei Sistemi Informatici Linguaggi per il Web a.a. 2014/2015 Riccardo Rosati Dipartimento
DettagliLinguaggi, Traduttori e le Basi della Programmazione
Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia Fondamenti di Informatica Anno Accademico 2011/2012 docente: Prof. Ing. Michele Salvemini Sommario Il Linguaggio I Linguaggi di Linguaggi
DettagliLinguaggi di programmazione - Principi e paradigmi 2/ed Maurizio Gabbrielli, Simone Martini Copyright The McGraw-Hill Companies srl
Approfondimento 2.1 Non è questo il testo dove trattare esaurientemente queste tecniche semantiche. Ci accontenteremo di dare un semplice esempio delle tecniche basate sui sistemi di transizione per dare
DettagliEsercitazioni 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
DettagliFunzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7
DettagliDefinire tramite una grammatica ad attributi il
1 ESERCIZI ESERCIZIO 1 Definire tramite una grammatica ad attributi il linguaggio L = {a n b n c n n 0} Implementare un analizzatore sintattico/ semantico a discesa ricorsiva Costruire le tabelle di analisi
DettagliCorso di Linguaggi di Programmazione + Laboratorio Docente: Marco de Gemmis
Corso di Linguaggi di Programmazione + Laboratorio Docente: Marco de Gemmis Capitolo 2 Grammatiche e Linguaggi Si ringraziano il Prof. Giovanni Semeraro e il Dott. Pasquale Lops per la concessione del
DettagliAnalisi 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
DettagliConcetti di base sugli automi e sui linguaggi formali
Concetti di base sugli automi e sui linguaggi formali Andrea Burattin 18 marzo 2005 Sommario Piccolo insieme di concetti sul funzionamento degli automi (a stati finiti, a pila,...), delle grammatiche libere
DettagliLA SINTASSI DEI LINGUAGGI DI PROGRAMMAZIONE. Ivan Lanese
LA SINTASSI DEI LINGUAGGI DI PROGRAMMAZIONE Ivan Lanese argomenti Grammatiche BNF Varianti: BNF + ε EBNF Remind: cos è una grammatica Una grammatica è uno strumento linguistico per definire insiemi di
DettagliIl 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à
DettagliLinguaggi e Grammatiche Liberi da Contesto
N.Fanizzi-V.Carofiglio Dipartimento di Informatica Università degli Studi di Bari 22 aprile 2016 1 Linguaggi Liberi da Contesto 2 Grammatiche e Linguaggi Liberi da Contesto G = (X, V, S, P) è una grammatica
DettagliEspressioni regolari
spressioni Regolari Un FA (NFA o DFA) e una macchina a stati finiti che riconosce linguaggi regolari. Una espressione regolare e un modo dichiarativo (o algebrico) per descrivere un linguaggio regolare.
DettagliProgramma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore
Programma del corso Introduzione agli algoritmi Rappresentazione delle Informazioni Architettura del calcolatore Reti di Calcolatori Elementi di Programmazione Algoritmi e programmi Algoritmo Sequenza
DettagliAnalizzatori 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
DettagliInformatica 3. LEZIONE 2: Sintassi e semantica
Informatica 3 LEZIONE 2: Sintassi e semantica Modulo 1: Introduzione ai concetti di sintassi e semantica Modulo 2: Il concetto di binding Modulo 3: Variabili Modulo 4: Routine Convenzioni dei nomi Informatica
DettagliUniversità degli studi Roma Tre. linguaggio Java. A cura di A. Orlandini. Linguaggi: Sintassi e Semantica - Il. Il linguaggio Java
Università degli studi Roma Tre Linguaggi: Sintassi e Semantica Il A cura di A. Orlandini 1 Obiettivi Distinguere la sintassi dalla semantica di un linguaggio Conoscere le convenzioni del meta-linguaggio
DettagliLezioni del corso di Progetto di Linguaggi e Traduttori
Università di Roma La Sapienza corso di laurea in Ingegneria Informatica Lezioni del corso di Progetto di Linguaggi e Traduttori a.a. 2006/2007 Riccardo Rosati Dipartimento di Informatica e Sistemistica
DettagliIntroduction. 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.
DettagliAnalisi 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
DettagliIl 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
DettagliGRAMMATICA FORMALE. Albero sintattico
GRAMMATICA FORMALE Una quadrupla VT,VN,P,S dove: VT è un insieme finito di simboli terminali VN è un insieme finito di simboli non terminali Pè uninsieme finito di produzioni, ossiadi regole di riscrittura
DettagliParsing. Marco Pennacchiotti. Tel Ing.dell Informazione, stanza 1035 (primo piano) 1 Luglio 2005
Intelligenza Artificiale A.A. 2004-2005 1 Luglio 2005 Parsing Marco Pennacchiotti pennacchiotti@info.uniroma2.it Tel. 0672597334 Ing.dell Informazione, stanza 1035 (primo piano) Sommario NOTA: Sono disponibili
DettagliProgrammazione. Marco Anisetti. Università degli Studi di Milano, Dipartimento di Informatica
Programmazione Marco Anisetti Università degli Studi di Milano, Dipartimento di Informatica marco.anisetti@unimi.it http://homes.di.unimi.it/anisetti/ Marco Anisetti - 1 / 40 Riepilogo lezione 1 Ruolo
DettagliMODULO 04 ELEMENTI DI TEORIA DEI LINGUAGGI FORMALI
MODULO 04 ELEMENTI DI TEORIA DEI LINGUAGGI FORMALI Un linguaggio di programmazione è uno strumento per esprimere algoritmi in una forma adatta allo loro esecuzione da parte di un elaboratore La formulazione
DettagliIntroduzione alla programmazione
Introduzione alla programmazione Risolvere un problema Per risolvere un problema si procede innanzitutto all individuazione Delle informazioni, dei dati noti Dei risultati desiderati Il secondo passo consiste
Dettagli(1) Linguaggio L = insieme di stringhe, sequenze finite di elementi del vocabolario
Luigi Rizzi Linguistica computazionale I. Elementi di base sulle grammatiche formali (1) Linguaggio L = insieme di stringhe, sequenze finite di elementi del vocabolario (2) Dato un vocabolario A, l insieme
Dettagli