Linguaggi e Grammatiche Alfabeto : insieme non vuoto di elementi detti simboli A = { a, b, c } Stringa : sequenza di simboli di un alfabeto ab abc abcab Lunghezza di una stringa X : |X| numero di simboli contenuti nella stringa A = {a,b} |aa| = 2 |bba| = 3 { } : stringa vuota, composta da nessun simbolo
A : alfabeto A * ( chiusura di A) : insieme di tutte le frasi composte da simboli di A, inclusa la stringa vuota A + (chiusura positiva di A) = A * - { } A = {a, b} A + = {a, ab, aa, aba, ….. } A * = { , a, ab, aa, aba, …. }
Il grosso gatto mangia il topo ( proposizione della lingua italiana ) IL GROSSO GATTO MANGIA IL TOPO ALBERO SINTATTICO
ALBERO SINTATTICO descrive la SINTASSI, cioè la struttura di una proposizione scomponendola nelle parti che la costituiscono IL GROSSO MANGIA GATTO | TOPO simbolo NON TERMINALE ; simboli TERMINALI
GRAMMATICA Quadrupla G = ( V N, V T, P, S ) V N : insieme dei simboli non terminali V T : insieme dei simboli terminali P : produzioni S : START SYMBOL (simbolo distintivo), S V N (parte sinistra di almeno una produzione) V N V T = V (vocabolario) P : insieme di regole del tipo ove V +, V *
Esempio V N = {, } V T = { 0, 1, 2 } S = P : a) b) c) 0 d) 1 e) 2 Deriviamo la seq b) a) c) d) e)
L’applicazione di una regola di P corrisponde ad una DERIVAZIONE Date 2 stringhe X e Y X produce direttamente Y ( X Y ) Se esiste una regola tale che X = a b Y = a b Per qualche a e b sottostringhe di X e Y (anche vuote)
* X produce Y ( X Y ) Se esiste una sequenza di produzioni dirette tali che X U 1 U 2 …… U n = Y con n > 0 0 0 1 * 012 La lunghezza della derivazione è 6
Data una Grammatica con start symbol S G(S) Si dice forma sentenziale una qualunque stringa X derivabile da S * S X Si dice PROPOSIZIONE una forma sentenziale di soli terminali Si dice LINGUAGGIO della grammatica G(S) * L = { X | S X e X V T + Cioè = { stringhe formate da elementi di V T che possono essere derivati da S G( ) genera un linguaggio L = {0, 1, 2, 01, 12, , …… Il numero 1234 non fa parte del linguaggio L
Classificazione di CHOMSKY a) Grammatiche di Tipo 0 (Phrase Structure) Le produzioni sono del tipo senza alcuna restrizione b) Grammatiche di Tipo 1 (Context Sensitive) Le produzioni possono avere la forma 1 A 2 1 2 con 1 e 2 V*, V +, A V N cioè A può essere espanso in solo se appare nel contesto 1 e 2 c) Grammatiche di Tipo 2 (Context Free) Le produzioni sono del tipo A con A V N e V + Cioè il simbolo a sinistra della produzione deve essere singolo, non terminale d) Grammatiche di Tipo 3 (Regular) Le produzioni sono del tipo A a oppure A a con A e B V N e a V T Un linguaggio generato da una grammatica context free si dice context free ecc. La maggior parte del lavoro svolto nella teoria dei linguaggi formali si riferisce a linguaggi liberi dal contesto o a linguaggi regolari
Gerarchia delle grammatiche Ogni grammatica regolare è libera dal contesto Ogni grammatica libera dal contesto è dipendente dal contesto Ogni grammatica dipendente dal contesto è a struttura di frase Regolare libera dal contesto dipendente dal contesto struttura di frase Libera dal contesto dipendente dal contesto struttura di frase Dipendente dal contesto struttura di frase Struttura di frase. La stessa gerarchia è valida per i linguaggi relativi
Esempio (grammatica dipendente dal contesto) G = ( V N, V T, P, S) con V N = S, B, C V T = a, b, c S = Start symbol e P: 1)S a S B C 2)S a B C 3)C B B C 4)A B a b 5)b B b b 6)b C b c 7)c C c c
Esempio (grammatica libera dal contesto) S a B S b A A a A a S A b A A B b B b S B a B B G = ( V N, V T, P, S) con V N = S, A, B V T = a, b S = Start symbol e P:
Esempio (grammatica regolare) S 0 A S 1 B A 0 A A 0 S A 1 B B 1 B B 1 B 0 S 0 G = ( V N, V T, P, S) con V N = S, A, B V T = 0, 1 S = Start symbol e P:
Esempio (grammatica regolare) G = ( V N, V T, P, S) con V N = S, B V T = 0, 1 S = Start symbol e P: S 0 B B 0 B B 1 S B 0
Una grammatica è RICORSIVA se esiste un algoritmo che determina, per qualunque parola W, se W è generata da G. Se G = ( V N, V T, P, S) è dipendente dal contesto, Allora è RICORSIVA Idem per grammatiche libere dal contesto e regolari
Esempio G = ( S, B, C , a, b, c , P, S) con P: S a B Cb C b c S a S B C b B b b C B B Cc C c c a B a b Vogliamo verificare se w = a b a c appartiene a L(G) T0 = S T1 = S, aSBC, aBC T2 = S, aSBC, aBC, abC * non abbiamo messo aaSBCBC e aaBCBC T3 = S, aSBC, aBC, abC, abc perché più lunghe di 4 = l(w) T4 = S, aSBC, aBC, abC, abc Quindi abac NON APPARTIENE a L(G)
Una grammatica G è RIDOTTA se sono verificate le seguenti condizioni: + 1) G non consente derivazioni circolari del tipo A A * 2) A V N, S A 3) A V N, L A (G) non è vuoto : L A (G) Esempio G con P = S aASb, A b non genera alcuna frase Esempio G con P = S aASb, S A, A S, A c presenta la derivazione circolare S A S Si può ridurre: P 1 = S aSSb | c
Esempio G con P = S a, S b, A b Presenta un A V N irragiungibile da S Si può ridurre a P 1 = S a, S b Esempio G = ( V N, V T, P, S) con V N = E, T, F ; V T = i, +, *, (, ) ; E E + T | T P = T T * F | F F ( E ) | i Genera il linguaggio: L(G) = i, i+i, i*i, (i+i)*i, …… Questa grammatica rispetta implicitamente la priorità della moltiplicazione (*) rispetto alla somma(+)!
Derivazione della frase i + i * i E E+T T+T F+T i+T i+T*F i+F*F i+i*F i+i*i E E + T T T * F F F i i Albero sintattico
Grammatica con struttura inadeguata (?) E E * T | T; T T * F | F; F V; V a | b | c | ……| z E E * T V T + F a V V b c a * b + c Analoga alla precedente ma con priorità somma rispetto al prodotto
Alberi di derivazione ( sintattici) Se G = ( V N, V T, P, S ) è una grammatica libera dal contesto Un albero è un ALBERO DI DERIVAZIONE per G se: Ogni nodo ha una label che è simbolo di V = V N V T La label della radice è S Se un nodo n ha almeno un discendente e ha label A, allora A V N Se i nodi N 1, N 2, … N k sono diretti discendenti del nodo n, in ordine da sinistra, con labels A 1, A 2, … A k, allora A A 1 A 2 … A k I nodi finali sono simboli terminali
Un albero di derivazione descrive una particolare forma sentenziale della grammatica G Esempio G = ( S,A , a, b , P, S) Con P: S a A S A S b A A S S S a A b a S a A S S b A a a b a Risultato dell’albero : a a b b a a S aAS aSbAS aabAS aabbaS aabbaa
Una grammatica G = ( VN, VT, P, S) è una grammatica LIBERA DAL CONTESTO se e solo se * Per e S (sequenza di produzioni dirette) C’è un albero di derivazione in G con risultato
Una frase X L(G) è detta AMBIGUA se è generata da G con almeno due alberi sintattici distinti. Allora anche G è AMBIGUA. Sia G con P = E E+E, E E*E, E (E), E i E E + E E + E i i i E E + E i E + E i i La frase i +i + i è AMBIGUA
Il problema dell’ambiguità delle grammatiche è NON DECIDIBILE Cioè non esiste un algoritmo generale per verificare se una grammatica sia ambigua o meno. Condizione necessaria per la non-ambiguità di una grammatica G libera dal contesto è che non esista un simbolo + U V N tale che U U
Altro esempio di grammatica ambigua E E + E E + E V V V e a b E E + E V E + E a V V b c E E + E | E * E | V ; V a | b| ….. | z