Parser top-down. Top-Down Parsing

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Parser top-down. Top-Down Parsing"

Transcript

1 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 risulta quella corretta) È una tecnica di parsing generale ma di norma non viene utilizzata. Non è efficente Predictive Parsing no backtracking Efficente Recursive Predictive Parsing è una forma speciale di parser discendente ricorsivo senza backtracking. Sono necessarie forma particolari di grammatiche 1

2 Una grammatica left-recursive può portare a un loop infinito un parser discendente ricorsivo (anche con backtracking) Per poter applicare parsing predittivo (senza backtracking) in molti casi basta scrivere una grammatica con attenzione, eliminarne la leftrecursion e applicare il left-factoring Recursive-Descent Parsing (uso del backtracking) È necessario il Backtracking. Cerca di trovare una left-most derivation. S abc S S B bc b a B c a B c input: abc b c Fallisce e esegue un backtrack b 2

3 Predictive Parser (esempio) istr if... while... begin... for... Quando troviamo il non-terminale istr se il token è uguale ad if scegliamo la prima regola se il token è uguale ad while scegliamo la seconda regola etc Grammatiche LL(1) Un grammatica si dice LL(1) se Scorre la frase da sinistra (Left) a destra produce derivazioni Leftmost usa un solo simbolo di lookahead ad ogni passo del parsing Tutti i parser LL(1) operano in un tempo lineare utilizzando un spazio lineare. LL(k): LL(1) possono essere estese con l utilizzo di k simboli di look-ahead, in modo che attraverso l utilizzo di più simboli le grammatiche restino predittive.. 3

4 LL(1) Parser input buffer Stringa di cui effettuare l analisi sintattica. Assumeremo che essa termini con un simboli di fine stringa $. stack Contiene i simboli terminali del linguaggio Alla fine della pila c è il simbolo speciale di fine stringa $. Inizialmente lo stack coontiene il simbolo speciale $ e l assioma S. Quando lo stack è vuoto il parsing è completato. output Una produzione rappresenta un passo della sequenza di derivazioni (left-most derivation) della stringa in un input buffer parsing table È un array bidimenzionale M[A,a] Ogni riga contiene un simbolo non-terminalel Ogni colonna un simbolo terminale o $ Ogni entry contiene una produzione. Detti LL(1) Parser Parser Actions X Il simbolo in cima alla pila (nota che X {T V $ a il simbolo di ingresso Sono possibili quattro diverse azioni: 1. X = $ ansd a = $ parser termina (successful completion) 2. X = a a X $ pops() e a = nexttoken() 3. X V il parser esamina M[X,a]. 1. If M[X,a] contiene una produzione X Y 1 Y 2...Y k, 2. {pops(); 3. pushes Y k,y k-1,...,y 1 into the stack. 4. outputs la produzione X Y 1 Y 2...Y k per rappresentare un passo di derivazione. 4. non dei casi sopra error Tutte le caselle vuote della parser table corrispondono ad errori X T e X a, error 4

5 S aba LL(1) Parser Example1 B bb ε stack input output $S abba$ S aba $aba abba$ $ab bba$ B bb $abb bba$ $ab ba$ B bb $abb ba$ $ab a$ B ε $a a$ $ $ S a S aba b $ B B ε B bb LL(1) Parser Esempio1 Outputs: S aba B bb B bb B ε Derivation(left-most): S aba abba abbba abba S parse tree a B a b B b B ε 5

6 LL(1) Parser Example2 E TE E +TE ε T FT T *FT ε F (E) id id + * ( ) $ E E TE E TE E E +TE T T FT T FT T T ε T *FT E ε T ε E ε T ε F F id F (E) LL(1) Parser Example2 stack input output $E id+id$ E TE $E T id+id$ T FT $E T F id+id$ F id $ E T id id+id$ $ E T +id$ T ε $ E +id$ E +TE $ E T+ +id$ $ E T id$ T FT $ E T F id$ F id $ E T id id$ $ E T $ T ε $ E $ E ε $ $ accept 6

7 Costruzione della Parser Table LL(1) Abbiamo definito le funzioni FIRST FOLLOW FIRST(α) è l insieme dei simboli terminali che possono occupare la prima posizione nella stringa che si ottime dalla derivazione di α dove α è una stringa di simboli di T e V. Se α deriva ε, allora ε FIRST(α). FOLLOW(A) è l insieme dei simboli terminale che si trovano immediatamente dopo (follow) il non-terminale A nelle stringhe derivate dall assioma a FOLLOW(A) iff $ FOLLOW(A) iff S * αaaβ S * αa FIRST Example E TE E +TE ε T FT T *FT ε F (E) id FIRST(F) = {(,id FIRST(TE ) = {(,id FIRST(T ) = {*, ε FIRST(+TE ) = {+ FIRST(T) = {(,id FIRST(ε) = {ε FIRST(E ) = {+, ε FIRST(FT ) = {(,id FIRST(E) = {(,id FIRST(*FT ) = {* FIRST(ε) = {ε FIRST((E)) = {( FIRST(id) = {id 7

8 FOLLOW Example E TE E +TE ε T FT T *FT ε F (E) id FOLLOW(E) = { $, ) FOLLOW(E ) = { $, ) FOLLOW(T) = { +, ), $ FOLLOW(T ) = { +, ), $ FOLLOW(F) = {+, *, ), $ Algoritmo per la costruzione della Parser Table LL(1) A α della grammatica G a FIRST(α) aggiungere A α in M[A,a] If ε FIRST(α) a FOLLOW(A) aggiungere A α in M[A,a] If ε FIRST(α) e $ FOLLOW(A) Aggiungere A α in to M[A,$] 8

9 Definizione di Predict di una produzione E possibile definire un insieme detto insieme dei predict di una produzione come l insieme dei look-ahead tokens che indicano che una produzione deve essere applicata. Data una grammatica non contestuale G(V,T,P,S) si definisce Predict(P) il seguente insieme di terminali: Data una P: A α First(α) se non esiste α ε Predict(A α) = {First(α) Follow(A) se esiste α ε Esempio E TE FIRST(TE )={(,id E TE into M[E,(] and M[E,id] E +TE FIRST(+TE )={+ E +TE into M[E,+] E ε FIRST(ε)={ε none but since ε in FIRST(ε) and FOLLOW(E )={$,) E ε into M[E,$] and M[E,)] T FT FIRST(FT )={(,id T FT into M[T,(] and M[T,id] T *FT FIRST(*FT )={* T *FT into M[T,*] T ε FIRST(ε)={ε none but since ε in FIRST(ε) and FOLLOW(T )={$,),+ T ε into M[T,$], M[T,)] and M[T,+] F (E) FIRST((E) )={( F (E) into M[F,(] F id FIRST(id)={id F id into M[F,id] 9

10 T = {a, b, c V = {S, A, B P = { (1) S ABc Predict(1) = First(Abc) = {a, b,c (2) A a Predict(2) = First(a) = {a (3) A ε Predict(3) = Follow(A) = {b,c (4) B b Predict(4) = First(b) = {b (5) B ε Predict(5) = Follow(B) = {c S = S T = {a, b V = {S, A, B P = { 1. S Ab Predict(1) = First(Abc) = {a, b 2. A a Predict(2) = First(a) = {a 3. A B Predict(3) = First(B) = {b 4. A ε Predict(4) = Follow(A) = {b 5. B b Predict(5) = First(b) = {b 6. B ε Predict(6) = Follow(B) = {b S = S 10

11 Grammatiche LL(1) Una grammaticha che ha una parse table semza entry multiple è una grammatica LL(1). Condizione necessaria e sufficiente perché una grammatica sia LL e che l insieme dei predict delle produzioni che hanno la stessa parte sinistra sia disgiunto Ogni grammatica LL(1) è non ambigua Grammatiche non LL(1) Eliminazione ricorsioni sinistre Fattorizzazione 11

12 Grammatiche non LL(1) Una grammatica ricorsiva sinistra (left recursive) non pui essere LL(1) A Aα β x FIRST(β) anche x FIRST(Aα) poichè Aα βα. If β = ε, x FIRST(α) anche x FIRST(Aα) e x FOLLOW(A). Una grammatica non puo essere fattorizzata (not left factored) se A αβ 1 αβ 2 x FIRST(αβ 1 ) anche x FIRST(αβ 2 ). Una grammatica ambigua non può esssere LL(1). T = {a, b, c, d, e, V = {S, B, C P = {(1) S ase Predict (S ase) = First(aSe) = {a (2) S B Predict (S B) = First(B) = {b, c, d (3) B bbe Predict (B bbe) = First(bBe) = {b (4) B C Predict (B C) = First(C) = {c, d (5) C cce Predict (C cse) = First(cCe) = {c (6) C d Predict (C d) = First(d) = {d S = S 12

13 Esempio a + b * c Simboli Terminali: T = {a, b, c,..., z {+, -, *, $, (, ) Simboli Non-terminali: V = {E, T, F, P (E: espressione, T: termine, F: fattore, P: primary) Assioma: E Rules: E E + T T T T * F F F P $ F P P (E) -P a... z // left associative // left associative // right associative Nota che noi possiamo codificare le precedenze (P ha la massima precedenza, seguita da F, T e E) e le associatività nella grammatica. Esempio Predict (E E + T) = First(E + T) = First(T) = First(F)) = { (, -, a,. Predict (E T) = First(T)= First(F)) = { (, -, a,. Predict (T T * F) = First(T* F) = First(F)) = { (, -, a,. Predict (T F) = First(F) = { (, -, a,. Predict (F P $ F) = First(P $ F) = First(P) = { (, -, a,. Predict (F P) = First(P) = { (, -, a,. Predict (P (E) = First((E)) = {( Predict (P -P) =First(-P) = {- Predict (P a) = First(a) = {a 13

14 E E + T T // left associative T T * F F // left associative F P $ F P // right associative P (E) -P a... z E T E' E' + T E' ε T F T' T' * F T' ε F P $ F P P (E) - P a... z Parser LL(1) Discesa ricorsiva cablato sulla grammatica Parsetable codice indipendente dalla grammatica 14

15 L'implementazione di un parser TopDown a discesa ricorsiva è costituito da un insieme di procedure, una per ogni non terminale. Ogni procedura è responsabile dell'analisi di una sequenza di token derivabili dai non-terminali. Ad esempio, una procedura di analisi, A, quando invocata dovrebbe chiamare lo scanner e far corrispondere una sequenza di token derivabile da A. Partrndo dall assioma si dovrebbe far corrispondere l'intero input, che deve essere derivabile Questo approccio è chiamato a discesa ricorsiva perché le procedura di parsing sono in genere ricorsive Algoritmo per costruire una parsing table predittiva per una grammatica G 1. Per ogni produzione A α della grammatica, ripetere i passi 2 e 3 2. Per ogni terminale a in FIRST( α ) inserire nella tabella come elemento M[ A, a] la produz. A α 3. Se ε è in FIRST( α ) inserire nella tabella come elemento M[ A, b] la produz. A α per ogni terminale b che appartiene a FOLLOW( A) Se ε è in FIRST( α ) inserire nella tabella come elemento M[ A,$] la produz. A α se $ appartiene a FOLLOW( A) ogni entry viene contrassegnata con error 15

16 Recursive Predictive Parsing Ogni non-terminale corrisponde ad una produzione Esempio A abb proc A { 1. matching del token corrente con a 2. Leggi il token successivo 3. B; 4. Matching del token corrente con b Recursive Predictive Parsing (cont.) A abb bab proc A { case token corrente { a : { matching del token corrente con a Leggi il token successivo B; Matching del token corrente con b b : { matching del token corrente con b Leggi il token successivo A; B; 16

17 Recursive Predictive Parsing (cont.) A aa bb ε Se tutte le produzioni falliscono noi possiamo applicare produzioni ε. Se ad esempio il token non è ne a ne b, possiamo applicare la produzione ε. Noi dobbiamo applicare la produzione ε per il non-terminale A quando il token corrente è uno dei terminali che puo seguire A Recursive Predictive Parsing (Esempio) A abe A cbd A C B bb B ε C f boolean A(){ switch (symbol) { case = 'f' : return C(); case = 'a' : {symbol = scanner(); if (B()) if (symbol == 'e') { symbol = scanner(); return true; else return false; return false; case = 'c' : {symbol = scanner(); if (B()) if (symbol == 'd'){ symbol = scanner(); return true; else return false; return false; default : return false; 17

18 Recursive Predictive Parsing (Esempio) A abe cbd C B bb ε C f boolean B() { switch (symbol) { case = 'b': {symbol = scanner(); return B(); case = 'd' 'e': return true; default return false; Recursive Predictive Parsing (Esempio) A abe cbd C B bb ε C f boolean C() { switch (symbol) { case = 'f': {symbol = scanner(); return true; default : return false; 18

19 Grammatica LL(1) S A a {b,d,a A B D {b, d, a B b { b B ε {d, a D d { d D ε { a boolean S(){ switch (symbol) { symbol in {b,d,a : { if (A()) { symbol = scanner(); if (symbol == 'a') return true; else return false; else return false; default : return false; boolean A(){ switch (symbol) { symbol in {b,d,a : { if (B()) if (D()) return true; else return false; else return false; default : return false; 19

20 boolean B() { switch (symbol) { symbol = 'b' : {symbol = scanner(); return true; symbol in {d, a : return true; default :return false; boolean D() { switch (symbol) { symbol = 'd' : {symbol = scanner(); return true; symbol = 'a' : return true; default :return false; Prog { Stmts Eof { { Stmts Stmt Stmts {id,if Stmts ε { Stmt id = Expr ; { id Stmt if ( Expr ) Stmt { if Expr id Etail { id Etail + Expr { + Etail -Expr - { - Etail ε { ), ; 20

21 Parser LL(1) Data la seguente grammatica : E T E' E' + T E' ε T F T' T' * F T' ε F P $ F P P (E) - P a... z si possono scrivere un insieme di procedure mutuamente ricorsive, una per ogni non terminale, che consentono di analizzare una frase e segnalare gli errori. Esempio T = {+, *, -, ^, (, ), a,..., z V = {E, E', T, T', F, P P = { 1. E T E' 2. E' + T E' 3. E' ε 4. T F T' 5. T' * F T' 6. T' ε 7. F P $ F 8. F ε 9. P (E) 10. P -P 11. P a b... z S = E 21

22 Una grammatiche che non è LL(1) S i C t S E a FOLLOW(S) = { $,e E e S ε FOLLOW(E) = { $,e C b FOLLOW(C) = { t FIRST(iCtSE) = {i FIRST(a) = {a FIRST(eS) = {e FIRST(ε) = {ε FIRST(b) = {b S E C a S a b C b e E e S E ε i S ictse t $ E ε 22

23 Svantaggi dei parser discendenti ricorsivi Sono castomizzati rispetto alla grammatica Utilizzo della ricorsione che non è efficiente Algoritmo di parsing LL(1) public boolen parser (){ Tabella ParseTable; Pila P; Produzione Pro; Simbolo C; P.push(S); C=scanner(); While (!p.empty()&&c!= $ ){ X = P.pop(); if (x == C) C = scanner() else {(if C.terminale) return false Pro = ParseTable.get(C,X); if (Pro.vuota()) return false p.push(pro); if (p.empty()&&c= $ ) return true else return false 23

Analisi sintattica. Analisi sintattica. albero. sintattico. parser. scanner. Errori sintattici

Analisi 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

Dettagli

Analisi sintattica. Syntax Analysis. albero. sintattico. parser. scanner. Errori sintattici

Analisi sintattica. Syntax Analysis. albero. sintattico. parser. scanner. Errori sintattici 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

Dettagli

albero sintattico parser scanner Errori sintattici

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

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

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

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

Linguaggi formali e compilazione

Linguaggi 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

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

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

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

ANALISI SINTATTICA AUTOMI PUSHDOWN. v x y. input u t w. tabella controllo. pila LUCIDI DI F. D'AMORE E A. MARCHETTI SPACCAMELA.

ANALISI SINTATTICA AUTOMI PUSHDOWN. v x y. input u t w. tabella controllo. pila 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 $ pila v x y z $ tabella controllo 2 ARGOMENTI Il compito dell'analisi sintattica Generazione automatica Trattamento

Dettagli

Linguaggi context free. Analizzatori sintattici e alberi di analisi

Linguaggi 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é

Dettagli

Applicazioni alla traduzione e compilazione

Applicazioni alla traduzione e compilazione Applicazioni alla traduzione e compilazione. Corso di Fondamenti di Informatica - 1 modulo Corso di Laurea in Informatica Università di Roma ``Tor Vergata'' Giorgio Gambosi a.a. 2018-2019 1 Fasi del processo

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

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

Esempio. Grammatica E! T E!! T! *F T " F! (E) i. procedure E. ! if cc in FIRST (TE )! then T; E!!! else ERRORE (1); E! T E

Esempio. Grammatica E! T E!! T! *F T  F! (E) i. procedure E. ! if cc in FIRST (TE )! then T; E!!! else ERRORE (1); E! T E Esempio Grammatica E! T E!! E! + T E " T! F T T! *F T " F! (E) i E! T E T! F T E! + T E "!! tabella codici di errore # 1. omissione di operando 2. omissione di operatore 3. simbolo inatteso 4. carattere

Dettagli

Dispensa 1. Da un punto di vista logico l architettura di un compilatore si può suddividere in due parti: Analisi e Sintesi.

Dispensa 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

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

Contenuti del corso. Parsing: esempio. Cosa aggiungiamo in questo corso. Parsing. Data una grammatica: E T T + E

Contenuti 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

Dettagli

Automa 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. 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

Dettagli

Grammatiche context-free

Grammatiche 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

Dettagli

Precisiamo il problema di SLR. Tabelle LR. Soluzione. Esempio. Item LR(1) Item LR(1) validi. Costruzione delle tabelle di parsing LR canoniche

Precisiamo il problema di SLR. Tabelle LR. Soluzione. Esempio. Item LR(1) Item LR(1) validi. Costruzione delle tabelle di parsing LR canoniche Precisiamo il problema di SLR Tabelle LR Costruzione delle tabelle di parsing LR canoniche In uno stato i la tabella indica una riduzione con una produzione A αse l insieme di item Ii contiene l item A

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

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

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

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 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

Dettagli

Gestione degli errori

Gestione degli errori Gestione degli errori Dispensa del corso di Linguaggi e Traduttori A.A. 2005-2006 La maggior parte dei compilatori dedica gran parte di tempo e spazio alla gestione degli errori. - Generazione dell'errore;

Dettagli

1. Calcolare FIRST e FOLLOW dei simboli non terminali della seguente grammatica:

1. 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)

Dettagli

Linguaggi di Programmazione Corso C. Parte n.9 Analisi Sintattica. Nicola Fanizzi

Linguaggi di Programmazione Corso C. Parte n.9 Analisi Sintattica. Nicola Fanizzi Linguaggi di Programmazione Corso C Parte n.9 Analisi Sintattica Nicola Fanizzi (fanizzi@di.uniba.it) Dipartimento di Informatica Università degli Studi di Bari Analizzatore Sintattico L analisi sintattica

Dettagli

20/11/2013 PARSER BOTTOM-UP EXAMPLE. V = {S, A, B, C} T = {a, b, d, e} P = { S aa. What means built the syntatic tree in a bottom-up fashion?

20/11/2013 PARSER BOTTOM-UP EXAMPLE. V = {S, A, B, C} T = {a, b, d, e} P = { S aa. What means built the syntatic tree in a bottom-up fashion? PARSER BOTTOM-UP EXAMPLE V = {S, A, B, C} T = {a, b, d, e} P = { S aa A BaA A e B ac B AdC C b R6 R1 R2 R3 R4 R5 What means built the syntatic tree in a bottom-up fashion? 1 EXAMPLE aedbae aedbaa aedcaa

Dettagli

Costruzione dell insieme dei Follow

Costruzione 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

Dettagli

PROLOG E ANALISI SINTATTICA DEI LINGUAGGI PROLOG E ANALISI SINTATTICA DEI LINGUAGGI PROLOG E ANALISI SINTATTICA DEI LINGUAGGI ESEMPIO

PROLOG E ANALISI SINTATTICA DEI LINGUAGGI PROLOG E ANALISI SINTATTICA DEI LINGUAGGI PROLOG E ANALISI SINTATTICA DEI LINGUAGGI ESEMPIO 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

Dettagli

Traduttore diretto dalla sintassi (seconda parte) Giuseppe Morelli

Traduttore 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

Dettagli

Parsing. Parsing: example. Parsing. What we add in these lectures. From a grammar: E T T + E

Parsing. Parsing: example. Parsing. What we add in these lectures. From a grammar: E T T + E This part of the course is dedicated to the parsing problem. Parsing All the material presented can also be found 4th chapter of the textbook: Compilers: Principles, Techniques, and Tools (2nd Edition)

Dettagli

Linguaggi formali e compilazione

Linguaggi formali e compilazione Linguaggi formali e compilazione Corso di Laurea in Informatica A.A. 2014/2015 Linguaggi formali e compilazione quivalenza di grammatiche In Informatica (e non solo, naturalmente) esistono sempre molti

Dettagli

Pumping lemma per i linguaggi Context-free

Pumping 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=

Dettagli

Analisi sintattica. Scopi Tecniche Strumenti ANTLR-Yacc. L3 - Introduzione ai compilatori - UNINA

Analisi sintattica. Scopi Tecniche Strumenti ANTLR-Yacc. L3 - Introduzione ai compilatori - UNINA Analisi sintattica Scopi Tecniche Strumenti ANTLR-Yacc 1 L analizzatore sintattico (parser) nel compilatore Linguaggio sorgente Analizzatore lessicale token Next token Analizzatore sintattico Parse tree

Dettagli

Linguaggi di Programmazione e Compilatori

Linguaggi di Programmazione e Compilatori Maria Rita Di Berardini Linguaggi di Programmazione e Compilatori Raccolta Esercizi 10 giugno 2009 Università di Camerino Dipartimenento di Matematica e Informatica Indice 1 Analisi Lessicale...........................................

Dettagli

PROLOG 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 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

Dettagli

Grammatiche libere da contesto. Grammatiche libere da contesto

Grammatiche libere da contesto. Grammatiche libere da contesto rammatiche e Linguaggi Liberi da Contesto Abbiamo visto che molti linguaggi non sono regolari. Consideriamo allora classi piu grandi di linguaggi. Linguaggi Liberi da Contesto (CFL) sono stati usati nello

Dettagli

1. Calcolare FIRST e FOLLOW dei simboli non terminali della seguente grammatica:

1. 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)

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

Analizzatori sintattici a discesa ricorsiva

Analizzatori sintattici a discesa ricorsiva Analizzatori sintattici a discesa ricorsiva E uno schema di analizzatore che sfrutta la descrizione grammaticale in EBNF adatto a grammatiche LL(1). Si basa sulla scrittura di procedure ricorsive ricavate

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

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

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

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

Esercizio 1. Codificare il parser a discesa ricorsiva del linguaggio definito dalla seguente EBNF:

Esercizio 1. Codificare il parser a discesa ricorsiva del linguaggio definito dalla seguente EBNF: Esercizio 1 Codificare il parser a discesa ricorsiva del linguaggio definito dalla seguente EBNF: program { stat + stat if-stat while-stat assign-stat if-stat if cond then stat { else-if [ else stat ]

Dettagli

Tabelle SLR. Costruzione di tabelle di Parsing SLR

Tabelle SLR. Costruzione di tabelle di Parsing SLR Tabelle SLR Costruzione di tabelle di Parsing SLR Metodo simple LR Metodo di costruzione di una tabella di parsing LR Abbreviazione: SLR Parser SLR: parser LR che usa una tabella di parsing SLR Grammatica

Dettagli

Tabelle SLR. Metodo simple LR. Potenza del metodo. Item LR(0) Idea Centrale del metodo SLR. Item LR(0) Costruzione di tabelle di Parsing SLR

Tabelle SLR. Metodo simple LR. Potenza del metodo. Item LR(0) Idea Centrale del metodo SLR. Item LR(0) Costruzione di tabelle di Parsing SLR Tabelle SLR Costruzione di tabelle di Parsing SLR Metodo simple LR Metodo di costruzione di una tabella di parsing LR Abbreviazione: SLR Parser SLR: parser LR che usa una tabella di parsing SLR Grammatica

Dettagli

Linguaggio Formale 2

Linguaggio Formale 2 Linguaggio Formale 2 Ex: Per generare il linguaggio L(G 1 ) = {a n b n c n } si può usare la grammatica G 1 = < {A,B,C}, {a,b,c}, P, A > Con regole di produzione P: 1. A abc 2. A abbc 3. Bb bb 4. Bc Cbcc

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

Grammatiche libere da contesto. Grammatiche libere da contesto

Grammatiche libere da contesto. Grammatiche libere da contesto rammatiche e Linguaggi Liberi da Contesto Abbiamo visto che molti linguaggi non sono regolari. Consideriamo allora classi piu grandi di linguaggi. Linguaggi Liberi da Contesto (CFL) sono stati usati nello

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

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

come segue: data una collezione C di elementi e una un elemento che verifica la proprietà P

come segue: data una collezione C di elementi e una un elemento che verifica la proprietà P Problemi di Ricerca Carla Binucci e Walter Didimo Il problema della Ricerca In generale, il Problema della Ricerca è definito come segue: data una collezione C di elementi e una proprietà P, determinare

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

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

Analisi Sintattica Top-down

Analisi Sintattica Top-down Analisi Sintattica Top-down Corrispondente a una derivazione canonica sinistra Top-down Backtracking Predittiva Discesa ricorsiva LL(1) Predittiva: senza backtracking necessario computare gli insiemi guida

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

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

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

Programmazione II. Lezione 3. Daniele Sgandurra 26/10/2010.

Programmazione II. Lezione 3. Daniele Sgandurra 26/10/2010. Programmazione II Lezione 3 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 26/10/2010 1/35 Programmazione II Lezione 3 26/10/2010 Sommario 1 2 Semantica 2/35 Programmazione II Lezione 3 26/10/2010 Parte

Dettagli

Proprietà dei linguaggi non contestuali

Proprietà 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

Dettagli

Progetto Laboratorio Programmazione Parte 2: Analizzatore sintattico di espressioni

Progetto Laboratorio Programmazione Parte 2: Analizzatore sintattico di espressioni Progetto Laboratorio Programmazione Parte 2: Analizzatore sintattico di espressioni Stefano Guerrini A.A. 2000/01 Come abbiamo già visto, l obiettivo del progetto è arrivare a determinare il valore assegnato

Dettagli

Linguaggi di Programmazione Corso C. Parte n.2 Introduzione ai Linguaggi Formali. Nicola Fanizzi

Linguaggi di Programmazione Corso C. Parte n.2 Introduzione ai Linguaggi Formali. Nicola Fanizzi Linguaggi di Programmazione Corso C Parte n.2 Introduzione ai Linguaggi Formali Nicola Fanizzi (fanizzi@di.uniba.it) Dipartimento di Informatica Università degli Studi di Bari Definizioni Preliminari Un

Dettagli

Backus Naur Form. Paolo Bison. Fondamenti di Informatica 1 A.A. 2004/05 Università di Padova. BNF, Paolo Bison, A.A ,

Backus Naur Form. Paolo Bison. Fondamenti di Informatica 1 A.A. 2004/05 Università di Padova. BNF, Paolo Bison, A.A , p.1/19 Backus Naur Form Paolo Bison Fondamenti di Informatica 1 A.A. 2004/05 Università di Padova Linguaggio di programmazione p.2/19 strumento linguistico per scrivere una sequenza di istruzioni (programma)

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

Espressività e limitazioni delle grammatiche regolari

Espressività 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

Dettagli

7. Automi a Pila e Grammatiche Libere

7. 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

Dettagli

Linguaggi Liberi dal Contesto. Linguaggi Liberi dal Contesto

Linguaggi 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

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

acuradi 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 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

Dettagli

Grammatiche. Rosario Culmone, Luca Tesei. 20/11/2006 UNICAM - p. 1/49

Grammatiche. 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

Dettagli

Linguaggi Liberi dal Contesto. Linguaggi Liberi dal Contesto

Linguaggi Liberi dal Contesto. Linguaggi Liberi dal Contesto rammatiche e Linguaggi Liberi da Contesto Data una stringa w L(G), dove G e un CGF, possono esistere diverse derivazioni di w (che tipicamente differiscono per l ordine di applicazione delle produzioni)

Dettagli

Fondamenti d Informatica: Grammatiche. Barbara Re, Phd

Fondamenti d Informatica: Grammatiche. Barbara Re, Phd Fondamenti d Informatica: Grammatiche Barbara Re, Phd Grammatiche } Con il termine grammatica s intende } Un formalismo che permette di definire un insieme di stringhe mediante l imposizione di un particolare

Dettagli

Grammatiche libere da contesto. Grammatiche libere da contesto

Grammatiche libere da contesto. Grammatiche libere da contesto rammatiche e Linguaggi Liberi da Contesto Abbiamo visto che molti linguaggi non sono regolari. Consideriamo allora classi piu grandi di linguaggi Linguaggi Liberi da Contesto (CFL) sono stati usati nello

Dettagli

Grammatiche e Linguaggi Liberi da Contesto

Grammatiche e Linguaggi Liberi da Contesto Grammatiche e Linguaggi Liberi da Contesto Abbiamo visto che molti linguaggi non sono regolari. Consideriamo allora classi più grandi di linguaggi. I Linguaggi Liberi da Contesto (CFL) sono stati usati

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

Non determinismo e grammatiche. Achille Frigeri Dipartimento di Matematica Francesco Brioschi Politecnico di Milano

Non determinismo e grammatiche. Achille Frigeri Dipartimento di Matematica Francesco Brioschi Politecnico di Milano Non determinismo e grammatiche Achille Frigeri Dipartimento di Matematica Francesco Brioschi Politecnico di Milano Modelli non deterministici - Macchine Automa a stati niti non deterministico (AFN) A =

Dettagli

Parte n.7 Automi a Pila e Grammatiche Libere

Parte n.7 Automi a Pila e Grammatiche Libere Linguaggi di Programmazione Corso C Parte n.7 Automi a Pila e Grammatiche Libere Nicola Fanizzi (fanizzi@di.uniba.it) Dipartimento di Informatica Università degli Studi di Bari Automi a Pila Per il teorema

Dettagli

Proprieta dei linguaggi liberi da contesto. Proprieta dei linguaggi liberi da contesto

Proprieta dei linguaggi liberi da contesto. Proprieta dei linguaggi liberi da contesto roprieta di CFL Semplificazione di una CFG: se un linguaggio e un CFL, ha una grammatica di una forma speciale. Pumping Lemma per CFL: simile ai linguaggi regolari. Proprieta di chiusura: alcune delle

Dettagli

Definire tramite una grammatica ad attributi il

Definire 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

Dettagli

Grammatiche Parse trees Lezione del 17/10/2012

Grammatiche 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,

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 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

Verifica se un Linguaggio Regolare è vuoto

Verifica se un Linguaggio Regolare è vuoto Verifica se un Linguaggio Regolare è vuoto Se si suppone di usare la rappresentazione del linguaggio nella sua forma di automa a stati finiti il problema puo essere formulato nel modo seguente: Se esiste

Dettagli

Lezioni del corso di Progetto di Linguaggi e Traduttori

Lezioni 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

Dettagli

Automi e Linguaggi Formali Automi a stack (Pushdown automata)

Automi 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

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

In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi.

In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi. In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi. 1 strutture dati (astratte) Una struttura dati astratti consiste di uno o più insiemi con delle operazioni

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 3. Se in uno stato c è l LR(0) item A α. (ossia un item col punto alla fine) è invocata una riduzione per ogni terminale a in Follow(A)

Dispensa 3. Se in uno stato c è l LR(0) item A α. (ossia un item col punto alla fine) è invocata una riduzione per ogni terminale a in Follow(A) Dispensa 3 3.1 Tecnica LR canonica Il punto debole della tecnica SLR illustrata in Dispensa 2 sta nelle riduzioni, che, ricordiamo, vengono inserite nella parsing table in accordo alla seguente regola:

Dettagli

LR Parser II Parte. Giuseppe Morelli

LR Parser II Parte. Giuseppe Morelli LR Parser II Parte Giuseppe Morelli Parser LR(1) Con il metodo SLR la tabella indica di effettuare una riduzione attraverso una produzione A-> α, se accade che per un certo item Ii : [A->α. Є Ii] Per ogni

Dettagli

Sintassi. Linguaggi. 4: Sintassi. Claudio Sacerdoti Coen. Universitá di Bologna 24/02/2011. Claudio Sacerdoti Coen

Sintassi. Linguaggi. 4: Sintassi. Claudio Sacerdoti Coen. Universitá di Bologna 24/02/2011. Claudio Sacerdoti Coen Linguaggi 4: Universitá di Bologna 24/02/2011 Outline 1 Wikipedia: La sintassi è la branca della linguistica che studia i diversi modi in cui le parole si uniscono tra loro per formare

Dettagli

GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONE. Cosimo Laneve

GRAMMATICHE 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

Dettagli

Quiz sui linguaggi CF

Quiz sui linguaggi CF Fondamenti dell Informatica 1 semestre Quiz sui linguaggi CF Prof. Giorgio Gambosi a.a. 2018-2019 Problema 1: Si consideri la seguente grammatica context free G, dove S, NP, V P, P P, A sono i simboli

Dettagli

Informatica e Laboratorio di Programmazione Automi Alberto Ferrari. Alberto Ferrari Informatica e Laboratorio di Programmazione

Informatica e Laboratorio di Programmazione Automi Alberto Ferrari. Alberto Ferrari Informatica e Laboratorio di Programmazione Informatica e Laboratorio di Programmazione Automi Alberto Ferrari Alberto Ferrari Informatica e Laboratorio di Programmazione automa o automa: macchina astratta o realizza un certo algoritmo, secondo

Dettagli

Alberi e alberi binari I Un albero è un caso particolare di grafo

Alberi e alberi binari I Un albero è un caso particolare di grafo Alberi e alberi binari I Un albero è un caso particolare di grafo I I I I È costituito da un insieme di nodi collegati tra di loro mediante archi Gli archi sono orientati (ogni arco esce da un nodo origine

Dettagli