Fondamenti teorici e programmazione FTP(A) - modb Lezione 16 Grammatiche Libere da Contesto Alberi di derivazione sintattica Linguaggio generato F.Bonchi Dip.to Informatica Fondamenti teorici e programmazione (A) - modb a.a. 2018/19 pag. 1
Ripasso Abbiamo visto: Espressioni regolari Automi deterministici a stati finiti; Automi non-deterministici a stati finiti; Questi tre modelli permettono di specificare tutti e soli i linguaggi regolari. Non tutti i linguaggi sono regolari. Ricordate la gerarchia di Chomsky. F.Bonchi Dip.to Informatica Fondamenti teorici e programmazione (A) - modb a.a. 2018/19 pag. 2
Linguaggi non regolari I seguenti sono esempi ben noti di linguaggi non regolari. 1. Il linguaggio di tutti i palindomi (es: anna, otto); 2. Il linguaggio delle parentesi bilanciate (es: [[][[]]] o [[]] ); 3. Il linguaggio delle stringhe di n a seguite da n b per ogni naturale n ({a n b n n N }). Il fatto che questi linguaggi non sono regolari può essere dimostrato attraverso il famoso pumping lemma (Sezione 3.6 delle dispense) che noi non vedremo. La sintassi dei linguaggi di programmazione solitamente non è un linguaggio regolare (vedi punto 2.) ma è solitamente un linguaggio libero da contesto. In questa lezione ci dedicheremo ai linguaggi liberi da contesto, cioè i linguaggi generati da una grammatica libera da contesto. F.Bonchi Dip.to Informatica Fondamenti teorici e programmazione (A) - modb a.a. 2018/19 pag. 3
Esempio: La grammatica delle espressioni aritmetiche ExA Num ExA ExA + ExA ExA ExA ExA ExA ExA ExA ExA ExA ExA Intuitivamente, la grammatica ci dice che un espressione aritmetica ( ExA ) o è un numero ( Num ) oppure la somma (+), la sottrazione ( ), la moltiplicazione ( ), la divisione ( ) di due espressioni aritmetiche. F.Bonchi Dip.to Informatica Fondamenti teorici e programmazione (A) - modb a.a. 2018/19 pag. 4
Esempio: La grammatica delle espressioni aritmetiche ExA Num ExA ExA + ExA ExA ExA ExA ExA ExA ExA ExA ExA ExA I simboli tra parentesi angolate, come ExA o Num vengono chiamate categorie sintattiche o simboli non-terminali. Intuitivamente queste denotano linguaggi. Vedremo dopo, la loro definizione formale. Il simbolo è un metasimbolo, che si legge può essere composto da. Gli altri simboli +,,, sono i simboli terminali, cioè i simboli dell alfabeto del linguaggio generato. F.Bonchi Dip.to Informatica Fondamenti teorici e programmazione (A) - modb a.a. 2018/19 pag. 5
Esempio: La grammatica delle espressioni aritmetiche Cif 0 Cif 1 Cif 2 Cif 3 Cif 4 Cif 5 Cif 6 Cif 7 Cif 8 Cif 9 Num Cif Num Num Cif ExA Num ExA ExA + ExA ExA ExA ExA ExA ExA ExA ExA ExA ExA I simboli non terminali sono ExA, Num, Cif ; I simboli terminali 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +,,,. F.Bonchi Dip.to Informatica Fondamenti teorici e programmazione (A) - modb a.a. 2018/19 pag. 6
Produzioni Nella grammatica precedente ogni riga viene detta una produzione. Ad esempio ExA ExA ExA è una produzione della grammatica precedente. Una produzione consiste di un simbolo non terminale a sinistra di e, alla sua destra, una sequenza di simboli terminali e non. Il simbolo non terminale a sinistra di viene detto la testa della produzione. La sequenza di simboli a destra di viene detta il corpo della produzione. Se S è l insieme dei simboli non terminali ed A l insieme dei simboli terminali, allora a destra di c è un elemento dell insieme (S + A) (si ricorda che + denota l unione disgiunta di insiemi). F.Bonchi Dip.to Informatica Fondamenti teorici e programmazione (A) - modb a.a. 2018/19 pag. 7
Grammatica libera da contesto Definizione: Una grammatica libera da contesto consiste di una tripla (A, S, P) dove: A è l insieme dei simboli terminali; S è l insieme dei simboli non termimali; P è un insieme di produzioni: ogni produzione ha la forma X w dove X S e w (A + S). F.Bonchi Dip.to Informatica Fondamenti teorici e programmazione (A) - modb a.a. 2018/19 pag. 8
Notazione breve per le produzioni Per accorciare la notazione, si possono rappresentare più produzioni su una sola riga. Si introduce un ulteriore metasimbolo che si legge oppure. Le produzioni si rappresentano come X w 1 X w 2... X w n X w 1 w 2 w n. F.Bonchi Dip.to Informatica Fondamenti teorici e programmazione (A) - modb a.a. 2018/19 pag. 9
Esempio (1) La grammatica precedente può essere espressa in modo conciso come segue. Cif 0 1 2 3 4 5 6 7 8 9 Num Cif Num Cif ExA Num ExA + ExA ExA ExA ExA ExA ExA ExA Il significato non cambia: un espressione aritmetica può essere composta da un numero, oppure la somma, oppure la sottrazione oppure... F.Bonchi Dip.to Informatica Fondamenti teorici e programmazione (A) - modb a.a. 2018/19 pag. 10
Esempio (2) Vogliamo rappresentare espressioni aritmetiche con variabili, come ad esempio x + 3 y. Si estende la precedente grammatica con la categoria sintattica degli identificatori ( Ide ) che intuitivamente contiene tutte le parole formate dai caratteri a, b, c,... z. Cif 0 1 2 3 4 5 6 7 8 9 Num Cif Num Cif ExA Num ExA + ExA ExA ExA ExA ExA ExA ExA Ide Ide Car Ide Car Car a b z Adesso l insieme dei simboli non terminali contiene anche a, b,... z. F.Bonchi Dip.to Informatica Fondamenti teorici e programmazione (A) - modb a.a. 2018/19 pag. 11
Esempio (3) La precedente grammatica può essere trasformata aggiungendo la categoria sintattica degli operatori aritmetici (OpA). OpA + Cif 0 1 2 3 4 5 6 7 8 9 Num Cif Num Cif ExA Num ExA OpA ExA Ide Ide Car Ide Car Car a b z F.Bonchi Dip.to Informatica Fondamenti teorici e programmazione (A) - modb a.a. 2018/19 pag. 12
Albero di derivazione sintattica Definizione: Sia (A, S, P) una grammatica libera da contesto. Un albero di derivazione sintattica (o parse tree) è un albero radicato dove: ogni nodo interno è etichettato da un simbolo non terminale (cioè un simbolo in S); ogni foglia è etichettata da un simbolo terminale (cioè un simbolo in A); ogni nodo interno v rappresenta l applicazione di una produzione, ovvero deve esistere una produzione tale che: 1. l etichetta del nodo v è la testa della produzione; 2. l etichette dei figli di v, da sinistra a destra, formano il corpo della produzione. Sia w A la parola ottenuta leggendo da sinistra a destra i simboli terminali che etichettano le foglie dell albero. Si dice w è la stringa testimoniata dall albero o che l albero è un parse tree di w. F.Bonchi Dip.to Informatica Fondamenti teorici e programmazione (A) - modb a.a. 2018/19 pag. 13
Esempio di albero di derivazione Data la grammatica sulla sinistra, un albero di derivazione per la parola x + 3 è rappresentato sulla destra. OpA + Cif 0 1 2 3 4 5 6 7 8 9 Num Cif Num Cif ExA Num ExA OpA ExA Ide Ide Car Ide Car Car a b z ExA ExA OpA ExA Ide + Num Car Cif x 3 F.Bonchi Dip.to Informatica Fondamenti teorici e programmazione (A) - modb a.a. 2018/19 pag. 14
Esempio di albero di derivazione Data la grammatica sulla sinistra, un albero di derivazione per la parola 35 è rappresentato sulla destra. OpA + Cif 0 1 2 3 4 5 6 7 8 9 Num Cif Num Cif ExA Num ExA OpA ExA Ide Ide Car Ide Car Car a b z Num Num Cif Cif 5 3 F.Bonchi Dip.to Informatica Fondamenti teorici e programmazione (A) - modb a.a. 2018/19 pag. 15
Esempio di albero di derivazione Data la grammatica sulla sinistra, un albero di derivazione per la parola temp è rappresentato sulla destra. OpA + Cif 0 1 2 3 4 5 6 7 8 9 Num Cif Num Cif ExA Num ExA OpA ExA Ide Ide Car Ide Car Car a b z Ide Ide Ide Car Ide Car m Car p Car e F.Bonchi Dip.to Informatica Fondamenti teorici e programmazione (A) - modb a.a. 2018/19 pag. 16 t
Linguaggio generato Definizione: Sia (A, S, P) una grammatica libera da contesto. Sia X S un simbolo non terminale. Il linguaggio generato da X è l insieme delle parole w A tali che esiste un parse tree per w avente come radice un nodo etichettato con X. Esempi: la stringa x + 3 è un espressione aritmetica, cioè appartiene al linguaggio generato da ExA ; la stringa 35 è un numero, cioè appartiene al linguaggio generato da Num ; la stringa temp è un identificatore (di variabile), cioè appartiene al linguaggio generato da Ide ; F.Bonchi Dip.to Informatica Fondamenti teorici e programmazione (A) - modb a.a. 2018/19 pag. 17
Esempio Si definisce w n come la concatenazione della stringa w A n-volte. (Definito formalmente per induzione su n: w 0 = ε, w n+1 = w w n ) Il linguaggio {a n b n n N } sull alfabeto A = {a, b} non è regolare. Questo linguaggio è però libero da contesto: esiste una grammatica libera da contesto avente un simbolo non terminale il cui linguaggio generato è esattamente {a n b n n N }. X ε a X b F.Bonchi Dip.to Informatica Fondamenti teorici e programmazione (A) - modb a.a. 2018/19 pag. 18