Forgotten Tales - By De4thkiss

Linguaggi
Liberi da Contesto
Nicola Fanizzi
Corso di Linguaggi di Programmazione
Dipartimento di Informatica
Università degli Studi di Bari
1 maggio 2014
Sommario
1
2
Nozioni Preliminari
Alberi di Derivazione e
Derivazioni Canoniche
Ambiguità
Proprietà dei Ling. Liberi
Principio di sostituzione
Pumping Lemma per L2
Esercizi – Pumping Lemma
Proprietà di Chiusura
Chiusura rispetto all’Unione
Chiusura rispetto al Prodotto
Chiusura rispetto
all’Iterazione
Altre Proprietà di Chiusura
Esercizi – proprietà di
chiusura
3
Configurazioni Istantanee
e Transizioni
Accettazione di Stringhe e
Linguaggi
Esempi
4
Forme Normali
FN di Chomsky
FN NLR
FN di Greibach
Trasformazioni delle
grammatiche libere
Teorema delle Forme
Normali
Predicati Decidibili
Automi a Pila
N. Fanizzi
Linguaggi di prog.+Lab
Parsing: Algoritmo CYK
Linguaggi Liberi da Contesto
1 maggio 2014
2 / 91
Nozioni Preliminari
Sommario
1
Nozioni Preliminari
Alberi di Derivazione e Derivazioni Canoniche
Ambiguità
2
Proprietà dei Ling. Liberi
3
Automi a Pila
4
Forme Normali
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
3 / 91
Nozioni Preliminari
Grammatiche e Linguaggi Liberi da Contesto
Una grammatica G = (Σ, V, S, P) è una grammatica libera da
contesto sse le sue produzioni sono tutte del tipo:
A −→ ω
con A ∈ V e ω ∈ (V ∪ Σ)∗
Il linguaggio L(G) si dice linguaggio libero da contesto
nome: in una derivazione, ogni non terminale può essere
sostituito con una parte destra di una sua produzione,
indipendentemente dal contesto della forma di frase in cui si
trova
sostituzione sempre valida
appartiene a questa categoria la maggior parte dei linguaggi
di programmazione
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
4 / 91
Nozioni Preliminari
Osservazioni
La classe dei linguaggi liberi è inclusa in quella dei linguaggi
contestuali
L2 liberi
L1 contestuali
XXXX
Una grammatica libera considera produzioni dove il contesto
destro e quello sinistro siano vuoti (= )
Eccezione una grammatica libera ammette ogni tipo di
-regola ossia ogni produzione del tipo
A −→ con A 6= S
vietate dalle grammatiche contestuali
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
5 / 91
Nozioni Preliminari
Alberi di Derivazione e Derivazioni Canoniche
Alberi
Le derivazioni di una grammatica libera possono essere
rappresentate graficamente attraverso alberi
Albero: grafo orientato, aciclico, connesso tale che ogni nodo ha
al più un arco entrante
la lunghezza di un
cammino dalla radice ad
una foglia è data dal
numero di nodi incontrati
radice
interno
interno
foglia
interno
foglia foglia
interno
l’altezza dell’albero è data
dalla lunghezza del
cammino più lungo
interno
la sequenza delle foglie
(lette da sinistra verso
destra) si definisce
frontiera dell’albero
foglia
foglia
frontiera
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
6 / 91
Nozioni Preliminari
Alberi di Derivazione e Derivazioni Canoniche
Alberi di Derivazione I
∗
Data G = (Σ, V , S, P) libera e w ∈ Σ∗ tale che S =⇒ w, un albero
di derivazione di w, denotato, Tw è così formato:
1
radice ← S
2
nodi interni ← simboli di V
3
foglie ← simboli di Σ ∪ V ∪ {} (o solo Σ se totalmente
espanso)
4
se ∃A −→ X1 X2 · · · Xk ∈ P allora un nodo interno A può
essere padre dei nodi figli X1 , X2 , . . . , Xk
A
X1
5
N. Fanizzi
X2
A
···
A
Xk
w si ottiene da Tw leggendo le foglie da sinistra a destra
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
7 / 91
Nozioni Preliminari
Alberi di Derivazione e Derivazioni Canoniche
Alberi di Derivazione II
Osservazioni
Un albero di derivazione non impone alcun criterio di scelta del
non terminale da espandere tramite una regola di produzione
per ottenere la sequenza corrispondente ad una derivazione
data una derivazione
esiste uno ed un solo albero che la rappresenta
dato un albero di derivazione
esistono più derivazioni possibili
a seconda dell’ordine scelto per l’applicazione delle
produzioni
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
8 / 91
Nozioni Preliminari
Alberi di Derivazione e Derivazioni Canoniche
Data G = ({a}, {S, H}, S, P) libera, con
Esempio
1
P = {S −→ Ha,
2
3
H −→ HS,
H −→ a}
S
H
S
H
H
a
a
a
a
La stringa aaaa ∈ L(G) si deriva sia tramite:
S =⇒ Ha =⇒ HSa =⇒ aSa =⇒ aHaa =⇒ aaaa
1
2
3
1
3
sia con:
S =⇒ Ha =⇒ HSa =⇒ HHaa =⇒ Haaa =⇒ aaaa
1
N. Fanizzi
Linguaggi di prog.+Lab
2
1
3
Linguaggi Liberi da Contesto
3
1 maggio 2014
9 / 91
Nozioni Preliminari
Alberi di Derivazione e Derivazioni Canoniche
Derivazioni Canoniche I
Data una grammatica G = (Σ, V , S, P) si dirà che la derivazione
S =⇒ ω1 =⇒ ω2 =⇒ · · · =⇒ ωn = w ∈ Σ∗
dove
ωi = αi Aβi e ωi+1 = αi φi βi ,
con i = 1, . . . , n − 1
è una derivazione canonica sinistra (risp. canonica destra)
sse per ogni i = 1, . . . , n − 1 risulta:
αi ∈ Σ∗
(risp. βi ∈ Σ∗ )
Talvolta queste derivazioni vengono denotate con =⇒ e =⇒,
lm
rispettivamente
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
rm
1 maggio 2014
10 / 91
Nozioni Preliminari
Alberi di Derivazione e Derivazioni Canoniche
Derivazioni Canoniche II
Esempio Si consideri la grammatica con produzioni:


 S −→ 0B | 1A

A −→ 0 | 0S | 1AA
P=


B −→ 1 | 1S | 0BB
Derivazione sinistra di 001101:
S =⇒ 0B =⇒ 00BB =⇒ 001SB =⇒ 0011AB =⇒ 00110B =⇒
001101
Derivazione destra di 001101:
S =⇒ 0B =⇒ 00BB =⇒ 00B1 =⇒ 001S1 =⇒ 0011A1 =⇒
001101
ma anche:
S =⇒ 0B =⇒ 00BB =⇒ 00B1S =⇒ 00B10B =⇒ 00B101 =⇒
001101
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
11 / 91
Nozioni Preliminari
Alberi di Derivazione e Derivazioni Canoniche
Derivazioni Canoniche III
G = ({a, +, *}, {E, I}, E, P) con
P = {E −→ E+E|E *E|I, I −→ a}
Derivazione sinistra di a+a:
E =⇒ E+E =⇒ I+E =⇒ a+E =⇒ a+I =⇒ a+a
Derivazione destra di a+a:
E =⇒ E+E =⇒ E+I =⇒ E+a =⇒ I+a =⇒ a+a
Derivazione non canonica di a+a:
E =⇒ E+E =⇒ E+I =⇒ I+I =⇒ a+I =⇒ a+a
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
12 / 91
Nozioni Preliminari
Ambiguità
Ambiguità I
Una grammatica G libera si dice ambigua sse esiste w ∈ L(G)
generabile attraverso almeno due alberi di derivazione differenti
ovvero sse w ammette almeno due derivazioni sinistre (o destre)
Esempio G = ({a, +, *}, {E, I}, E, P) ambigua con
P = {E −→ E+E|E *E|I, I −→ a}
Ad es. w = a+a*a ottenibile mediante 2 alberi:
E
E
E
E
I
a
N. Fanizzi
E
E
E
E
E
I
I
I
I
a
a
+ a
Linguaggi di prog.+Lab
E
*
Linguaggi Liberi da Contesto
+
a *
I
a
1 maggio 2014
13 / 91
Nozioni Preliminari
Ambiguità
Ambiguità II
Esempio G = (Σ, V, S, P) con Σ = {if, else, (, ), a, b, p, q}
V = {S, C}
P = { S −→ if C S else S | if C S | a | b,
C −→ (p) | (q) }
Si consideri la stringa if (p) if (q) a else b
S
if
S
C
(p) if
S
C
S else S
(q) a
N. Fanizzi
Linguaggi di prog.+Lab
if
C
(p)
b
Linguaggi Liberi da Contesto
else
S
if
C
S
S
b
(q) a
1 maggio 2014
14 / 91
Nozioni Preliminari
Ambiguità
Ambiguità III
G0 = (Σ, V ∪ {S1 , S2 }, S, P0 ) non ambigua,
si adotta
else alla if più vicina:
 la convenzione di associare ogni 
S
−→
S
|
S


1
2




S1 −→ if C S1 else S1 | a | b
0
P =

 S2 −→ if C S | if C S1 else S2 



C −→ (p) | (q)
S
S2
if
C
S
(p)
S1
if
C
(q)
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
S1 else S1
a
b
1 maggio 2014
15 / 91
Nozioni Preliminari
Ambiguità
Ambiguità IV
Teorema
Il problema del riconoscimento dell’ambiguità di un linguaggio
libero non è decidibile.
In pratica: soluzioni con aggiunta di livelli di precedenza,
parentesi e associatività
Esempio modificando la precedente grammatica ambigua:
G = ({a, +, *, (, )}, {E, I, T, F}, E, P) non ambigua con
P = {E −→ T|E+E, T −→ F|T *T, F −→ I|(E), I −→ a}
Un linguaggio libero L si dice inerentemente ambiguo sse
ogni grammatica che lo genera è ambigua
Esempio
N. Fanizzi
L = {ai bj ck | i, j, k > 0, (i = j) ∨ (j = k)}
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
16 / 91
Proprietà dei Ling. Liberi
Sommario
1
Nozioni Preliminari
2
Proprietà dei Ling. Liberi
Principio di sostituzione
Pumping Lemma per L2
Proprietà di Chiusura
3
Automi a Pila
4
Forme Normali
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
17 / 91
Proprietà dei Ling. Liberi
Principio di sostituzione
Principio di sostituzione I
P = {E → T|E+T, T → F|T *F, F → i|(E)}
E
E
E
+
T
T
T
F
F
i
i
E
F
*
(
T
E
E
+
E
T
)
F
F
i
T
T
F
F
i
i
F
*
(
)
E
T
F
T * F
i
F
(E )
i
T
T
T
+
F
i
i
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
18 / 91
Proprietà dei Ling. Liberi
Principio di sostituzione
Principio di sostituzione II
S
A
A
u
N. Fanizzi
Linguaggi di prog.+Lab
v
w
Linguaggi Liberi da Contesto
x
y
1 maggio 2014
19 / 91
Proprietà dei Ling. Liberi
Principio di sostituzione
Principio di sostituzione III
Sottoalberi si possono sostituire con sottoalberi di pari radice
Generalizzazione: se si incontra almeno due volte un NT A
nell’albero di derivazione di z:
il sottoalbero interno con radice A genera w
quello esterno genera vwx
sostituendo l’albero esterno con quello interno si ottiene un
albero valido per uwy
invece, sostituendo interno con quello esterno si ottiene un
albero per uvvwxxy cioè uv2 wx2 y
iterando questa sostituzione possono derivare le stringhe in
{uvn wxn y | n ≥ 0}
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
20 / 91
Proprietà dei Ling. Liberi
Principio di sostituzione
Principio di sostituzione IV
S
A
A
u
v
w
x
y
S
S
A
A
A
w
u
v
x
y
A
u
Linguaggi di prog.+Lab
Proposizione
N. Fanizzi
y
Linguaggi Liberi da Contesto
v
w
x
1 maggio 2014
21 / 91
Proprietà dei Ling. Liberi
Principio di sostituzione
Relazione altezza albero – lunghezza stringa I
Il fattore di ramificazione per una grammatica libera
G = (Σ, V , S, P) è dato da:
max{|ω| ∈ N | A −→ ω ∈ P}
Proposizione
Data una grammatica libera G = (Σ, V, S, P) con fattore di
ramificazione m, sia w ∈ L(G).
Se h ∈ N è l’altezza di Tw , allora |w| ≤ mh
Dim. Per induzione sull’altezza h dell’albero di Tw :
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
22 / 91
Proprietà dei Ling. Liberi
Principio di sostituzione
Relazione altezza albero – lunghezza stringa II
h = 1 In tal caso, der. diretta con una S −→ ω.
Ma |ω| ≤ m = m1
h > 1 Si suppone che la tesi valga per alberi di altezza pari al più
a h, si deve dimostrare per Tw di altezza h + 1.
Sia S −→ ω, dove α = X1 X2 · · · Xk
con Xi ∈ Σ ∪ V in ω, i = 1, . . . , k ≤ m la prod. che
determina il livello più alto dell’albero Tw
Ogni Xi può essere, a sua volta, radice di Ti di altezza ≤ h.
Quindi, per ipotesi di induzione, i Ti generano k stringhe
wi tali che |wi | ≤ mh .
Pertanto:
P
Pk
h
h
h
h+1
|w| = ki=1 |wi | ≤
i=1 m = k · m ≤ m · m = m
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
23 / 91
Proprietà dei Ling. Liberi
Pumping Lemma per L2
Pumping Lemma per Linguaggi Liberi I
Teorema (uvwxy)
Sia L un linguaggio libero da contesto.
Esiste una costante p, dipendente solo da L, tale che
ogni z ∈ L con |z| > p può essere scritta come uvwxy in modo che:
1
|vwx| ≤ p
2
al più uno tra v e x è la parola vuota (vx 6= )
3
∀i ∈ N : uvi wxi y ∈ L
Dim. Sia G una grammatica che genera L
Siano m = max{|ω| | A −→ ω ∈ P} e k = |V |
Posto p = mk+1 , consideriamo z ∈ L tale che |z| > p
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
24 / 91
Proprietà dei Ling. Liberi
Pumping Lemma per L2
Pumping Lemma per Linguaggi Liberi II
Per il lemma: |z| > p = mk+1 allora ogni albero di derivazione
per z ha un’altezza maggiore di k + 1
k = |V| implica che in un cammino dell’albero ci sia una multipla
occorrenza di un NT, sia esso A ∈ V
Possiamo identificare 2 occorrenze:
1) la prima compare ad una distanza dalle foglie ≤ k + 1
sia vwx la stringa derivata dal suo sottoalbero
2) dalla seconda occorrenza di A deriva la sottostringa w
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
25 / 91
Proprietà dei Ling. Liberi
Pumping Lemma per L2
Pumping Lemma per Linguaggi Liberi III
1
2
3
Dal Lemma risulta: |vwx| ≤ mk+1 = p
Per assurdo, se fosse v = = x, la sostituzione del
sottoalbero superiore con quello inferiore non provoca
nessun cambiamento.
Ma, in tal caso, esiste un cammino di lunghezza ≤ k + 1 e
quindi si avrebbe un albero per z di altezza ≤ k + 1.
Contraddizione.
Applicando il principio di sostituzione a z = uvwxy
sostituiamo il sottoalbero inferiore con quello superiore,
ottenendo:
uwy = uv0 wx0 y
Con la sostituzione inversa: uv2 wx2 y e ripetendo i − 1 volte:
uvi wxi y
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
26 / 91
Proprietà dei Ling. Liberi
Pumping Lemma per L2
Pumping Lemma per Linguaggi Liberi IV
Osservazioni
Dato un linguaggio generato da una grammatica non libera
non si può escludere che esista una grammatica libera che lo
generi
Se un linguaggio infinito non rispetta il Pumping Lemma dei
linguaggi liberi non può essere generato da una grammatica
libera
Quindi questo teorema fornisce una condizione necessaria
ma non sufficiente perché un linguaggio sia libero
Si utilizza per dimostrare che un linguaggio non è libero
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
27 / 91
Proprietà dei Ling. Liberi
Pumping Lemma per L2
Esercizi – Pumping Lemma I
Dimostrare che i seguenti linguaggi non sono liberi da contesto:
1
{at | t primo}
2
{an bn cn | n > 0}
3
{an | n ≥ 0}
4
{ai bj | i = 2j , i, j ≥ 0}
5
{an bm | n > 2m , n, m ≥ 0}
6
{ak br | k > 0, r > k 2 }
7
{an bm cp | 1 ≤ n ≤ m ≤ p}
8
{a2 | n ≥ 1}
9
{ai bj ci dj | i, j ≥ 1}
10
{ww | w ∈ {0, 1}+ }
2
N. Fanizzi
n
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
28 / 91
Proprietà dei Ling. Liberi
Pumping Lemma per L2
Esercizi – Pumping Lemma II
Esercizio 1. Dimostrare che L = {at | t primo} ∈
/ L2
Dato p del P.L., sia t primo tale che t > p
Si può scegliere quindi z = at ∈ L
Sia z = uvwxy, con v = ak e x = ah ,
essendo k + h > 0 (poiché vx 6= )
Si consideri z(t+1) = uv(t+1) wx(t+1) y
|z(t+1) | = |z| + |vt | + |xt | = t + (k + h)t = t(1 + k + h)
Ma t(1 + k + h) non è primo, quindi z(t+1) 6∈ L
Contraddizione. Quindi L ∈
/ L2 .
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
29 / 91
Proprietà dei Ling. Liberi
Pumping Lemma per L2
Esercizi – Pumping Lemma III
Esercizio 2. Dimostrare che L = {an bn cn | n > 0} non è libero
Supponiamo che L sia libero.
Allora vale il P.L.: per un certo p ∈ N fissato si consideri
z = uvwxy = ap bp cp ∈ L: |z| = 3p > p.
Per il P.L.: |vwx| ≤ p e zi = uvi wxi y ∈ L, ∀i ∈ N con vx 6= Per costruzione, vwx non può contenere assieme sia a iniziali
sia c finali, essendo |vwx| ≤ p
Quindi 2 casi:
1. nessuna c: quindi z0 = uv0 wx0 y = uwy 6∈ L
avendo perso delle a e b in v e x ma non le c di z
2. nessuna a: analogamente, uwy 6∈ L
avendo meno b e c delle a rimaste inalterate (sono p).
(nessuna b, ma solo a e c, impossibile)
Quindi L non può essere libero
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
30 / 91
Proprietà dei Ling. Liberi
Pumping Lemma per L2
Esercizi – Pumping Lemma IV
2
Esercizio 3. Dimostrare che L = {an | n ≥ 0} non è libero
Supponiamo che L = {, a, aaaa, a9 , a16 , . . .} sia libero.
Valendo il Pumping Lemma per un certo p ∈ N.
2
si considera z = uvwxy = ap ∈ L tale che |z| = p2 > p
Anche z2 = uv2 wx2 y ∈ L (per la 3. del Lemma)
Ma si osservi la catena di maggiorazioni:
|z2 | = |z| + |vx| ≤ p2 + p < p2 + 2p + 1 = (p + 1)2
Quindi: |z2 | < (p + 1)2 . Ma |z2 | = |z| + |vx| > |z| = p2
Perciò p2 < |z2 | < (p + 1)2 lunghezza compresa tra due
quadrati consecutivi di n.ri naturali, ciò implica che z2 6∈ L.
Assurdo, quindi L non è libero
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
31 / 91
Proprietà dei Ling. Liberi
Pumping Lemma per L2
Esercizi – Pumping Lemma V
Esercizio 5. Dimostrare che {an bm | n > 2m , n, m ≥ 0} 6∈ L2
Se vale il Pumping Lemma per un certo p ∈ N si considera
p
z = uvwxy = a(2 +s) bp ∈ L tale che |z| = 2p + s + p > p
Caso: v = ah e x = bk .
Allora |zi | = |uvi wxi y| = |z| + (i − 1)h + (i − 1)k =
2p + s + p + (i − 1)h + (i − 1)k.
Se ∃i : 2p + s + (i − 1)h ≤ p + (i − 1)k allora zi 6∈ L
La diseq. si può semplificare 2p + (i − 1)h ≤ (i − 1)k da cui:
i(k − h) ≥ 2p − (k − h) ossia i ≥ 2p /(k − h) − 1.
Se k > h allora basta considerare i = 2p ≥ 2p /(k − h) − 1
Altri casi, per esercizio.
Quindi L non è libero
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
32 / 91
Proprietà dei Ling. Liberi
Proprietà di Chiusura
Chiusura rispetto all’unione I
Teorema (chiusura unione)
La classe dei linguaggi liberi L2 è chiusa rispetto all’unione.
Dim.
Siano L1 , L2 ∈ L2 , generati, risp., da
G1 = (Σ, V1 , S1 , P1 ) e G2 = (Σ, V2 , S2 , P2 )
con V1 ∩ V2 = ∅
Si costruisce G = (Σ, V , S, P) con
V = V1 ∪ V2 ∪ {S},
S 6∈ V1 ∪ V2
P = {S −→ S1 |S2 } ∪ P1 ∪ P2
[Nota: questo vale anche per L1 , L2 ∈ Li , i = 0, 1]
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
33 / 91
Proprietà dei Ling. Liberi
Proprietà di Chiusura
Chiusura rispetto al prodotto
Teorema (chiusura prodotto)
La classe dei linguaggi liberi L2 è chiusa rispetto al prodotto
Dim.
Date G1 = (Σ, V1 , S1 , P1 ) e G2 = (Σ, V2 , S2 , P2 ) libere
tali che L(Gi ) = Li , i = 1, 2
si costruisce G = (Σ, V, S, P) con
P = {S −→ S1 · S2 } ∪ P1 ∪ P2
Si osservi che questo metodo vale per solo la classe L2
(per L0,1 occorre evitare l’interferenza dei contesti)
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
34 / 91
Proprietà dei Ling. Liberi
Proprietà di Chiusura
Chiusura rispetto all’iterazione
Teorema (chiusura iterazione)
La classe dei linguaggi liberi L2 è chiusa rispetto all’iterazione
Dim.
Per L1 ∈ L2 , considerata G1 = (Σ, V1 , S1 , P1 ),
costruiamo G = (Σ, V1 ∪ {S}, S, P) dove:
P = {S −→ , S −→ S1 S} ∪ P1
Anche questo metodo vale per solo la classe L2
(per L0,1 occorre evitare l’interferenza dei contesti)
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
35 / 91
Proprietà dei Ling. Liberi
Proprietà di Chiusura
Altre proprietà di chiusura
Proposizione
La classe dei linguaggi liberi L2 non è chiusa rispetto al
complemento e all’intersezione
Dim. si considerino i linguaggi
L1 = {an bn ck | n, k > 0} e
L2 = {an bk ck | n, k > 0}
la cui intersezione è L1 ∩ L2 = {ak bk ck | k > 0} ∈ L1 \ L2
Tuttavia:
Teorema
Se L è libero e LR è regolare allora L ∩ LR è libero
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
36 / 91
Proprietà dei Ling. Liberi
Proprietà di Chiusura
Chiusura rispetto alla sostituzione I
Si definisce una sostituzione su Σ come s : Σ → ℘(T ∗ ) tale che:
a ∈ Σ 7→ s(a) = La ⊆ T ∗
Questa funzione si può estendere alle stringhe, s : Σ∗ → ℘(T ∗ )
con
w = a1 a2 · · · an ∈ Σ∗ 7→ s(w) = s(a1 )s(a2 ) · · · s(an )
ed ai linguaggi: s : ℘(Σ∗ ) → ℘(T ∗ ) con
[
L ⊆ Σ∗ 7→ s(L) =
s(w)
w∈L
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
37 / 91
Proprietà dei Ling. Liberi
Proprietà di Chiusura
Chiusura rispetto alla sostituzione II
Esempio Siano s(0) = {an bn | n > 0} e s(1) = {aa, bb}.
Sia w = 01, allora
s(w) = s(0)s(1) = {w | w = an bn aa ∨ w = an bn bb, n > 0}
Sia L = L(0∗ ), allora s(L) = s((0)∗ ) = [s(0)]∗ , quindi
s(L) = {an1 bn1 an2 bn2 · · · ank bnk | k ≥ 0}
Teorema (chiusura sostituzione)
La classe dei linguaggi liberi è chiusa rispetto alla sostituzione.
Da ciò discendono anche le chiusure rispetto ad unione, prodotto
e chiusure positiva e transitiva e riflessiva (+ e ∗ ) ed anche:
Teorema (chiusura omomorfismo)
La classe dei linguaggi liberi è chiusa rispetto ad omomorfismo (ed
anche all’omomorfismo inverso)
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
38 / 91
Proprietà dei Ling. Liberi
Proprietà di Chiusura
Chiusura rispetto alla riflessione
Una parola w ∈ Σ∗ si dice palindroma se w = wR
Proposizione
Sia w ∈ Σ∗ . Allora w è palindroma sse ∃v ∈ Σ∗ ∃s ∈ Σ ∪ {}
w = vsvR
Teorema (chiusura rispetto alla riflessione)
La classe dei linguaggi liberi è chiusa rispetto a riflessione.
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
39 / 91
Proprietà dei Ling. Liberi
Proprietà di Chiusura
Esercizi – proprietà di chiusura I
1
2
3
Dimostrare che L = {an bn cm | n, m > 0} è libero
Dati L1 = {an bn | n ≥ 0} e L2 = {a}∗ · {bb}∗ ,
dimostrare che L = L1 ∩ L2 è libero
Utilizzare la proprietà di chiusura di L2 rispetto a ∪
per dimostrare che i seguenti linguaggi sono liberi:
i. L = {ai bk | i 6= k, i, k ≥ 0}
ii. L = {w ∈ {a, b}∗ | w = wR }
iii. L = {a, b}∗ \ {ai bi | i ≥ 0}
4
Usando la proprietà di chiusura dell’intersezione con ling.
regolari, dimostrare che sono liberi:
i. {an bn | n 6= 7}
ii. {0n 1n | n = 3k + 1, k ≥ 0}
iii. {w ∈ {a, b}∗ | w palindroma, |w| 6= 3k, k ≥ 0}
5
Analogamente,
dimostrare che
non sono liberi:
i. an bm ck | k ≥ m ≥ n ≥ 0
ii. {w ∈ {a, b, c}∗ | na (w) = nb (w) = nc (w)}
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
40 / 91
Proprietà dei Ling. Liberi
Proprietà di Chiusura
Esercizi – proprietà di chiusura II
Esercizio 1. Dimostrare che L = {an bn cm | n, m > 0} è libero e
trovare una grammatica che lo generi
L può essere inteso come prodotto di linguaggi:
L1 = {an bn | n > 0} libero e
L2 = {cm | m > 0} = {c}+ = {c}∗ \ {} lineare destro
(e quindi anche libero L3 ( L2 )
L = L1 · L2 deve essere libero per la chiusura
G1 = ({a, b}, {S1 }, S1 , P1 )
con P1 = {S1 −→ aS1 b|ab}
G2 = ({c}, {S2 }, S2 , P2 )
Quindi: G = (Σ, V , S, P)
Σ = {a, b} ∪ {c} = {a, b, c}
con P2 = {S2 −→ cS2 |c}
V = V1 ∪ V2 ∪ {S} = {S, S1 , S2 }
P ={S −→ S1 S2 } ∪ P1 ∪ P2 =
={S −→ S1 S2 , S1 −→ aS1 b|ab, S2 −→ cS2 |c}
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
41 / 91
Proprietà dei Ling. Liberi
Proprietà di Chiusura
Esercizi – proprietà di chiusura III
Esercizio 3. Utilizzare la proprietà di chiusura di L2 rispetto a ∪
per dimostrare che i seguenti linguaggi sono liberi:
i. L = {ai bk | i 6= k, i, k ≥ 0}
ii. L = {w ∈ {a, b}∗ | w = wR }
iii. L = {a, b}∗ \ {ai bi | i ≥ 0}
1
2
3
Riscrivendo L come segue {ai bk | i < k} ∪ {ai bk | i > k} . . .
Si osservi che w ∈ L ⇔ w = szs, e inoltre w = uuR oppure
w = usuR , con s ∈ Σ e z ∈ L, u ∈ Σ∗ . . .
Scomponiamo il linguaggio (in modo ricorsivo) come segue
L ={wa | w ∈ Σ∗ } ∪
{bw | w ∈ Σ∗ } ∪
{sws | w ∈ Σ∗ , s ∈ Σ} ∪
{azb | z ∈ L}
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
42 / 91
Automi a Pila
Sommario
1
Nozioni Preliminari
2
Proprietà dei Ling. Liberi
3
Automi a Pila
Configurazioni Istantanee e Transizioni
Accettazione di Stringhe e Linguaggi
Esempi
4
Forme Normali
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
43 / 91
Automi a Pila
Introduzione
Automi con Memoria
Per riconoscere linguaggi più complessi rispetto a quelli di Ldf
occorrono altri strumenti più potenti:
Dato un alfabeto finito Σ di ingresso:
nastro di ingresso: contiene i simboli dell’alfabeto di ingresso Σ;
su un simbolo insiste una testina di lettura
memoria ausiliaria: ha capacità virtualmente illimitata ed un
proprio alfabeto di memoria (o di lavoro)
Se l’organizzazione della memoria è a stack, si
definirà l’automa risultante automa a pila (o
automa push-down, PDA)
unità di controllo: controlla le transizioni dell’automa, in base al
contenuto della memoria e del simbolo letto
dalla testina sul nastro.
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
44 / 91
Automi a Pila
Introduzione
Modello di PDA
a
b
a
a
b
a
q0 q1 q2 q3 q4 q5
N. Fanizzi
Linguaggi di prog.+Lab
b
a
Control
Unit
Linguaggi Liberi da Contesto
a
b
a
A
B
A
Z0
stack
●
a
1 maggio 2014
45 / 91
Automi a Pila
Introduzione
Automi a pila I
Un automa a pila è costituito da una n-pla:
M = (Q, Σ, Γ, δ, q0 , Z0 , F)
Q insieme finito e non vuoto degli stati
Σ insieme finito e non vuoto detto alfabeto di ingresso
Γ insieme finito e non vuoto detto alfabeto della pila
δ funzione di transizione:
δ : Q × (Σ ∪ {}) × Γ −→ ℘(Q × Γ∗ )
scritta anche come (q0 , σ) ∈ δ(q, s, Z) ovvero (q, s, Z, q0 , σ)
q0 ∈ Q è lo stato iniziale
Z0 ∈ Γ è il simbolo iniziale della pila
F ⊆ Q è l’insieme degli stati finali
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
46 / 91
Automi a Pila
Introduzione
Automi a pila II
Diagramma di transizione:
0,Z0 /ZZ0
1,Z0 /UZ0
0,Z/ZZ
0,U/ZU
1,Z/UZ
1,U/UU
q0
N. Fanizzi
Linguaggi di prog.+Lab
0,Z/
1,U/
,Z0 /Z0
,Z/Z
,U/U
q1
,Z0 /Z0
Linguaggi Liberi da Contesto
q2
1 maggio 2014
47 / 91
Automi a Pila
Configurazioni Istantanee e Transizioni
Configurazioni Istantanee e transizioni I
Per descrivere lo stato globale di un PDA in ogni istante,
una configurazione istantanea (ID) è una terna
(q, w, σ) ∈ Q × Σ∗ × Γ∗
q∈Q
w = a1 a2 · · · an ∈
σ = Z1 Z2 · · · Zm
stato corrente dell’unità di controllo
Σ∗
sottostringa da esaminare sul nastro
(testina posizionata su a1 )
contenuto della pila (con Z1 in cima)
configurazione iniziale (q0 , w, Z0 )
configurazione finale (q, , σ)
N. Fanizzi
Linguaggi di prog.+Lab
con q ∈ F, σ ∈ Γ∗
Linguaggi Liberi da Contesto
1 maggio 2014
48 / 91
Automi a Pila
Configurazioni Istantanee e Transizioni
Configurazioni Istantanee e transizioni II
Sia M nello stato q, sia a letto sul nastro e A in cima alla pila:
1
se δ contiene (q, a, A, q0 , A1 · · · Ak )
ossia se (q0 , A1 · · · Ak ) ∈ δ(q, a, A)
M può operare la transizione:
(q, aw, Aσ) ` (q0 , w, A1 · · · Ak σ)
2
se δ è descritta dalla n-pla (q, , A, q0 , A1 · · · Ak )
ossia se (q0 , A1 · · · Ak ) ∈ δ(q, , A)
allora M può operare la transizione:
(q, w, Aσ) ` (q0 , w, A1 · · · Ak σ)
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
49 / 91
Automi a Pila
Accettazione di Stringhe e Linguaggi
Condizioni di accettazione per PDA
w ∈ Σ∗ è accettata dal PDA M in condizione di stato finale sse:
∗
q ∈ F, σ ∈ Γ∗
(q0 , w, Z0 ) ` (q, , σ)
linguaggio accettato da M in condizione di stato finale:
∗
L(M) = {w ∈ Σ∗ | (q0 , w, Z0 ) ` (q, , σ) con q ∈ F, σ ∈ Γ∗ }
w ∈ Σ∗ è accettata dal PDA M in condizione di pila vuota sse:
∗
(q0 , w, Z0 ) ` (q, , )
q∈Q
linguaggio accettato da M in condizione di pila vuota:
∗
L(M) = {w ∈ Σ∗ | (q0 , w, Z0 ) ` (q, , ) con q ∈ Q}
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
50 / 91
Automi a Pila
Accettazione di Stringhe e Linguaggi
Linguaggi accettati da PDA
Teorema
La classe dei linguaggi accettati da PDA in condizione di pila vuota
coincide con la classe dei linguaggi accettati in condizione di stato
finale
Dim. (cenni)
Se si raggiunge uno stato finale e la pila non è vuota occorre
ripulire la pila dai simboli restanti senza cambiare stato
Se la pila è vuota bisogna obbligare l’automa a transitare in uno
stato finale senza modificare la situazione della pila
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
51 / 91
Automi a Pila
Esempi
PDA – Esempio #1 / I
L = {w ∈ {a,b}∗ | na (w) = nb (w)}
G = (Σ, V , S, P)
Σ = {a,b}
V = {S}
P = {S −→ ab|ba|SS|aSb|bSa}
M = (Q, Σ, Γ, δ, q0 , Z0 , F)
Q = {q0 }
Γ = {Z0 , A, B}
F=∅
N. Fanizzi
Linguaggi di prog.+Lab
pila
A
B
Z0
Linguaggi Liberi da Contesto
stato
q0
q0
q0
a
AA
AZ0
b
BB
BZ0
1 maggio 2014
52 / 91
Automi a Pila
Esempi
PDA – Esempio #1 / II
Programma per PDA (è omesso lo stato q0 ):
1
(a, Z0 , AZ0 )
2
(b, Z0 , BZ0 )
3
(a, A, AA)
4
(b, B, BB)
5
(a, B, )
6
(b, A, )
7
(, Z0 , )
N. Fanizzi
-regola per cancellare il fondo della pila
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
53 / 91
Automi a Pila
Esempi
PDA – Esempio #1 / III
pila
A
B
Z0
stato
q0
q0
q0
a
AA
AZ0
b
BB
BZ0
stringa abba
(q0 , abba, Z0 ) ` (q0 , bba, AZ0 ) ` (q0 , ba, Z0 ) ` (q0 , a, BZ0 ) `
(q0 , , Z0 ) ` (q0 , , )
la stringa è accettata.
stringa aababa
(q0 , aababa, Z0 ) ` (q0 , ababa, AZ0 ) ` (q0 , baba, AAZ0 ) `
(q0 , aba, AZ0 ) ` (q0 , ba, AAZ0 ) ` (q0 , a, AZ0 ) ` (q0 , , AAZ0 )
la stringa non è accettata.
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
54 / 91
Automi a Pila
Esempi
PDA – Esempio #2 / I
L = {wcwR | w ∈ {a,b}∗ }
G = (Σ, V , S, P)
Σ = {a,b,c}
V = {S}
P = {S −→ c|aSa|bSb}
M = (Q, Σ, Γ, δ, q0 , Z0 , F)
Q = {q0 , q1 }
q0 : lettura
q1 : match
Γ = {Z0 , A, B}
F=∅
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
55 / 91
Automi a Pila
Esempi
PDA – Esempio #2 / II
pila
A
A
B
B
Z0
Z0
stato
q0
q1
q0
q1
q0
q1
a
(q0 , AA)
(q1 , )
(q0 , AB)
(q0 , AZ0 )
-
b
(q0 , BA)
(q0 , BB)
(q1 , )
(q0 , BZ0 )
-
c
(q1 , A)
(q1 , B)
(q1 , Z0 )
-
Osservazione
c segnala il cambiamento di stato (centro del palindromo):
in q1 si comincia a svuotare la pila riempita nello stato q0
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
56 / 91
Automi a Pila
Esempi
PDA – Esempio #2 / III
Programma per PDA:
1
(q0 , a, Z0 , q0 , AZ0 )
2
(q0 , a, A, q0 , AA)
3
(q0 , a, B, q0 , AB)
4
(q0 , b, Z0 , q0 , BZ0 )
5
(q0 , b, A, q0 , BA)
6
(q0 , b, B, q0 , BB)
7
(q0 , c, Z0 , q1 , Z0 )
8
(q0 , c, A, q1 , A)
9
(q0 , c, B, q1 , B)
10
(q1 , a, A, q1 , )
11
(q1 , b, B, q1 , )
12
(q1 , , Z0 , q1 , )
N. Fanizzi
Linguaggi di prog.+Lab
la 1. la 2. e la 3. si possono
riassumere con:
(q0 , a, Z, q0 , AZ) ∀Z ∈ Γ
la 4. la 5. e la 6. si possono
riassumere con:
(q0 , b, Z, q0 , BZ) ∀Z ∈ Γ
la 7. la 8. e la 9. si possono
riassumere con:
(q0 , c, Z, q1 , Z) ∀Z ∈ Γ
-regola
Linguaggi Liberi da Contesto
1 maggio 2014
57 / 91
Automi a Pila
Esempi
PDA – Esempio #3 / I
L = {wwR | w ∈ {a, b}∗ }
G = (Σ, V , S, P)
M = (Q, Σ, Γ, δ, q0 , Z0 , F)
Q = {q0 , q1 }
Σ = {a,b}
q0 : lettura
q1 : match
V = {S}
P = {S −→ |aSa|bSb}
Γ = {Z0 , A, B}
F=∅
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
58 / 91
Automi a Pila
Esempi
PDA – Esempio #3 / II
pila
A
A
B
B
Z0
Z0
stato
q0
q1
q0
q1
q0
q1
a
{(q0 , AA), (q1 , )}
(q1 , )
(q0 , AB)
(q0 , AZ0 )
-
b
(q0 , BA)
{(q0 , BB), (q1 , )}
(q1 , )
(q0 , BZ0 )
-
automa non deterministico con due possibilità, trovandosi in q0
leggere il prossimo simbolo dal nastro
passare in q1
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
59 / 91
Automi a Pila
Esempi
PDA – Esempio #3 / III
Programma per PDA:
1
(q0 , a, Z, q0 , AZ) ∀Z ∈ Γ
2
(q0 , b, Z, q0 , BZ)
3
(q0 , , Z, q1 , Z)
4
(q1 , a, A, q1 , )
5
(q1 , b, B, q1 , )
6
(q1 , , Z0 , q1 , )
N. Fanizzi
Linguaggi di prog.+Lab
(invece della -regola precedente)
Linguaggi Liberi da Contesto
1 maggio 2014
60 / 91
Automi a Pila
Esempi
PDA – Esempio #3 / IV
pila
A
A
B
B
Z0
Z0
stato
q0
q1
q0
q1
q0
q1
a
{(q0 , AA), (q1 , )}
(q1 , )
(q0 , AB)
(q0 , AZ0 )
-
b
(q0 , BA)
{(q0 , BB), (q1 , )}
(q1 , )
(q0 , BZ0 )
-
Riconoscimento della stringa abba
(q0 , abba, Z0 ) ` (q0 , bba, AZ0 ) ` (q0 , ba, BAZ0 ) ?
2
scelta ` (q0 , a, BBAZ0 ) ` (q0 , , ABBAZ0 ) blocco. 5
scelta ` (q1 , a, AZ0 ) ` (q1 , , Z0 ) ` (q1 , , )
La stringa è accettata.
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
61 / 91
Automi a Pila
Esempi
PDA e determinismo
Osservazioni
L1 = {wcwR | w ∈ {a,b}∗ }
accettato da un PDA deterministico
L2 = {wwR | w ∈ {a,b}∗ }
accettato da un PDA non deterministico
si può dimostrare che
6 ∃M ∈ PDA deterministico tale che L(M) = L2
pertanto la classe dei linguaggi riconosciuta dai PDA
deterministici è inclusa strettamente in quella dei linguaggi
riconosciuti da PDA non deterministici
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
62 / 91
Forme Normali
Sommario
1
Nozioni Preliminari
2
Proprietà dei Ling. Liberi
3
Automi a Pila
4
Forme Normali
FN di Chomsky
FN NLR
FN di Greibach
Trasformazioni delle grammatiche libere
Teorema delle Forme Normali
Predicati Decidibili
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
63 / 91
Forme Normali
Forme Normali I
Esempio Si consideri
G = (Σ, V , S, P)
Σ = {0,1,2}
V = {S, A, B}
P = {S −→ 0SAB|1, A −→ 1A|1, B −→ 2B|2}
Data la forma delle produzioni,
la lettura del primo simbolo (terminale) può essere usata in modo
predittivo per decidere il resto della stringa che si dovrà derivare
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
64 / 91
Forme Normali
Forme Normali II
Costruiamo l’automa a pila equivalente:
M = (Q, Σ, Γ, δ, q0 , Z0 , F)
Q = {q0 }
Γ = {S, A, B} con Z0 = S
F=∅
pila
S
A
B
N. Fanizzi
stato
q0
q0
q0
0
(q0 , SAB)
Linguaggi di prog.+Lab
1
(q0 , )
{(q0 , A), (q0 , )}
2
{(q0 , B), (q0 , )}
Linguaggi Liberi da Contesto
1 maggio 2014
65 / 91
Forme Normali
Forme Normali III
Se le produzioni della grammatica sono in una certa forma si può
definire facilmente un PDA mediante il seguente risultato:
Teorema
Data G = (Σ, V, S, P) libera con produzioni della forma
A −→ bσ
con b ∈ Σ, σ ∈ V ∗ , esiste un PDA M, tale che L(G) = L(M).
Dim. Si consideri M = (Q, Σ, Γ, δ, q0 , Z0 , F) con
Q = {q0 }
Γ=V
Z0 = S
F=∅
∀A −→ bα ∈ P : (q0 , α) ∈ δ(q0 , b, A)
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
66 / 91
Forme Normali
FN di Chomsky
Forma Normale di Chomsky
Una grammatica libera G = (Σ, V , S, P)
è in forma normale di Chomsky
se ogni produzione è di uno dei tipi seguenti:
1
S −→ 2
A −→ BC
con A ∈ V e
3
N. Fanizzi
B, C ∈ V \ {S}
B, C ∈ V
se S −→ ∈ P
altrimenti
A −→ a
con A ∈ V, a ∈ Σ
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
67 / 91
Forme Normali
FN NLR
Forma Normale NLR
Una grammatica libera G = (Σ, V , S, P)
è in forma priva di ricorsioni sinistre (NLR, No Left Recursion)
se non ha produzioni del tipo:
A −→ Aβ
dove A ∈ V , β ∈ (V ∪ Σ)∗
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
68 / 91
Forme Normali
FN di Greibach
Forma Normale di Greibach
Una grammatica libera G = (Σ, V , S, P)
è in forma normale di Greibach (GNF, Greibach Normal Form)
se ogni produzione è del tipo:
1
S −→ 2
A −→ aσ
dove A ∈ V ,
N. Fanizzi
Linguaggi di prog.+Lab
a ∈ Σ,
σ ∈ V∗
Linguaggi Liberi da Contesto
1 maggio 2014
69 / 91
Forme Normali
Trasformazioni delle grammatiche libere
Passaggio alle Forme Normali
Teorema
Sia G una grammatica libera.
Allora esistono Gi , i = 1, 2, 3 equivalenti a G, tali che
G1 è in forma normale di Chomsky
G2 è in forma normale di Greibach
G3 è in forma normale NLR priva di ricorsioni sinistre
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
70 / 91
Forme Normali
Trasformazioni delle grammatiche libere
Trasformazioni e riduzioni
Tramite opportuni algoritmi,1 è possibile trasformare una
grammatica libera nella equivalente grammatica ridotta
eliminando
le -produzioni
le produzioni unitarie (chain-rules) A −→ B
i simboli inutili X:
∗
non generativi X =⇒
6
w ∈ Σ∗ o
∗
non raggiungibili S =⇒
6
αXβ
1
Ad es. cfr. [Ausiello et al.,(2003)][Hopcroft et al.,(2009)].
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
71 / 91
Forme Normali
Trasformazioni delle grammatiche libere
Sostituzione
Considereremo nel seguito linguaggi privi di (si può sempre aggiungere facendola produrre da S)
Teorema (sostituzione)
Sia G = (Σ, V, S, P) libera.
Se ∃A −→ σBδ ∈ P con σ, δ ∈ (Σ ∪ V )∗
e ∃B 6= A : B −→ ω1 | · · · |ωn ∈ P
ˆ = (Σ, V, S, P)
ˆ equivalente con:
allora si può costruire G
ˆ = P \ {A −→ σBδ} ∪ {A −→ σω1 δ| · · · |σωn δ}
P
Esempio A −→ 0|00A|01B2 e B −→ 011A|1
Sostituendo B in A: A −→ 0|00A|01011A2|0112 e B −→ 011A|1
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
72 / 91
Forme Normali
Trasformazioni delle grammatiche libere
Rimozione delle produzioni inutili I
Esempio S −→ 0S1||A e A −→ 0A
S −→ A è inutile perché A non è generatore di stringhe terminali
Esempio S −→ A, A −→ 0A|, B −→ 1A
B inutile perché non è raggiungibile da S pur generando (via A)
stringhe di terminali
Definizione (non-terminali utili)
Data G = (Σ, V , S, P) libera. Si dirà che A ∈ V è utile sse
∗
∗
∃w ∈ L(G) : S =⇒ σAδ =⇒ w
con σ, δ ∈ (Σ ∪ V )∗ .
Si dirà inutile un non-terminale che non è utile.
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
73 / 91
Forme Normali
Trasformazioni delle grammatiche libere
Rimozione delle produzioni inutili II
Esempio
S −→ 0S|A|C, A −→ 0, B −→ 00, C −→ 0C1
NT utili perché generatori di stringhe terminali:
A per A −→ 0,
B per B −→ 00,
S per S =⇒ A =⇒ 0
Rimuovendo C: S −→ 0S|A, A −→ 0, B −→ 00
Studiamo le dipendenze con un grafo di raggiungibilità:
S
A
B
due NT C e D sono collegati da un arco sse ∃(C −→ σDδ) ∈ P
Quindi eliminando B rimangono: S −→ 0S|A, A −→ 0
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
74 / 91
Forme Normali
Trasformazioni delle grammatiche libere
Rimozione delle produzioni inutili III
Teorema (eliminazione non-terminali e prod. inutili)
ˆ = (Σ, V,
ˆ S, P)
ˆ libera
Sia G = (Σ, V, S, P) libera. Esiste G
equivalente senza non-terminali e produzioni inutili
Dim.
1
data G, costruire G0 = (Σ, V 0 , S, P0 ):
1
2
V0 ← ∅
esegui
per ogni A ∈ V tale che A −→ ω ∈ P con ω ∈ (Σ ∪ V 0 )∗ :
V 0 ← V 0 ∪ {A}
3
2
ˆ
data G0 , costruire G:
1
2
3
N. Fanizzi
fintantoché V 0 sia stato modificato
P0 prende da P le prod. con simboli in Σ ∪ V 0
Si costruisce il grafo delle dipendenze di G0
Si trovano le var. non raggiungibili da S
Si eliminano le loro produzioni
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
75 / 91
Forme Normali
Trasformazioni delle grammatiche libere
Rimozione delle -produzioni I
Una produzione
A −→ si dice -produzione
Spesso si possono rimuovere
Esempio S −→ 0N1, N −→ 0N1| per generare {0n 1n | n > 0}
Si rimuove la -produzione per sostituzione:
S −→ 0N1|01, N −→ 0N1|01
Un non-terminale A tale che
∗
A =⇒ si dice annullabile
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
76 / 91
Forme Normali
Trasformazioni delle grammatiche libere
Rimozione delle -produzioni II
Teorema (eliminazione -produzioni)
Sia G = (Σ, V, S, P) libera tale che 6∈ G.
ˆ = (Σ, V
ˆ , S, P)
ˆ libera equivalente senza -produzioni
Allora esiste G
Dim.
1
trovare VN ⊆ V insieme dei non-terminali annullabili in G
1
2
per ogni produzione A −→ ∈ P:
VN ← VN ∪ {A}
ripeti
per ogni produzione B −→ A1 · · · Ak ∈ P con A1 , . . . , Ak ∈ VN :
VN ← VN ∪ {B}
fino a quando non ci sono più modifiche
2
N. Fanizzi
per ogni p = A −→ s1 · · · sk ∈ P con s1 , . . . , sk ∈ V ∪ Σ:
ˆ←P
ˆ ∪ {p} ∪ sostNull(p, VN )
P
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
77 / 91
Forme Normali
Trasformazioni delle grammatiche libere
Rimozione delle -produzioni III
Osservazione sostNull(p, VN ) restituisce l’insieme delle
produzioni ottenute sostituendo le variabili annullabili di VN in p
con in tutte le combinazioni possibili
(tranne A −→ , nel caso le si fossero tutte annullabili)
Esempio data G con produzioni:
S −→ AB0C, A −→ BC, B −→ 1|, C −→ D|, D −→ 2
dall’algoritmo VN = {A, B, C},
per cui si trasforma in:
S −→ AB0C|B0C|A0C|AB0|0C|B0|A0|0
A −→ BC|B|C
B −→ 1
C −→ D
D −→ 2
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
78 / 91
Forme Normali
Trasformazioni delle grammatiche libere
Rimozione delle produzioni unitarie I
Una produzione
A −→ B
si dice produzione unitaria
Si possono rimuovere utilizzando il teorema di sostituzione
Teorema (eliminazione produzioni unitarie)
Sia G = (Σ, V, S, P) libera tale priva di senza -produzioni. Allora
ˆ = (Σ, V,
ˆ S, P)
ˆ libera equivalente senza produzioni unitarie
esiste G
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
79 / 91
Forme Normali
Trasformazioni delle grammatiche libere
Rimozione delle produzioni unitarie II
Dim. le produzioni A −→ A si possono eliminare direttamente.
ˆ ← {p ∈ P | p prod. non unitaria}
P
Costruire il grafo delle dipendenze tra NT
limitato alle prod. unitarie
arco da C a D sse C −→ D ∈ P
∗
Per ogni hA, Bi, tali che A =⇒ B con A 6= B secondo il grafo:
ˆ
Selezionare le prod. di B in P:
ˆ
B −→ ω1 |ω2 | · · · |ωm ∈ P
ˆ←P
ˆ ∪ {A −→ ω1 |ω2 | · · · |ωm }
P
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
80 / 91
Forme Normali
Trasformazioni delle grammatiche libere
Rimozione delle produzioni unitarie III
Esempio
date le prod. S −→ A0|B, A −→ 0|12|B, B −→ A|11
S
∗
∗
B
∗
A
∗
da cui: S =⇒ A, S =⇒ B, A =⇒ B, B =⇒ A
Quindi si inizializza con: {S −→ A0, A −→ 0|12, B −→ 11}
A
A
B
B
A
A
z}|{ z}|{ z}|{
z}|{
z}|{ z}|{
Aggiungendo: S −→ 0 | 12 | 11 , A −→ 11 , B −→ 0 | 12
si ottiene:
S −→ A0|0|12|11, A −→ 0|12|11, B −→ 11|0|12
con B inutile
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
81 / 91
Forme Normali
Trasformazioni delle grammatiche libere
Rimozione delle produzioni unitarie IV
Osservazioni
applicare le sostituzioni direttamente alle singole prod.
unitarie non funzionerebbe nel caso di dipendenze cicliche
per esercizio, provare con la gramm. dell’es. precedente
su alcuni testi si parla di chiusura della rel. di raggiungibilità
tramite prod. unitarie UG
hA, Bi ∈ UG sse A −→ B
chiusura
UG∗ = {hA, Bi | A −→ B}∪{hA, Ci | hA, Bi ∈ UG∗ ∧B −→ C ∈ P}
∗
quindi hA, Bi ∈ UG∗ sse A =⇒ B
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
82 / 91
Forme Normali
Trasformazioni delle grammatiche libere
Applicazione delle trasformazioni
Dato che una trasformazione può generare problemi dell’altro
tipo, l’ordine consigliato è:
1
Rimozione delle -produzioni
2
Rimozione produzioni inutili
3
Rimozione delle produzioni unitarie
altre trasformazioni:
Eliminazione ricorsione sinistra
Fattorizzazione
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
83 / 91
Forme Normali
Teorema delle Forme Normali
Teoremi di Equivalenza
Attraverso le trasformazioni trattate in precedenza
Un linguaggio libero
è sempre generabile da una grammatica libera in GNF
Da ciò discendono:
Teorema
Ogni linguaggio libero è riconosciuto da un automa a pila
Teorema
Ogni linguaggio accettato da un automa a pila è libero
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
84 / 91
Forme Normali
Predicati Decidibili
Predicati Decidibili
Sfruttando le argomentazioni del pumping lemma si può
determinare, mediante opportuni algoritmi, se una grammatica
libera genera un linguaggio infinito, vuoto o finito ma non vuoto
[Ausiello et al.,(2003)]:
Teorema
Data una grammatica G di tipo 2 è decidibile stabilire se L(G) è
infinito.
Teorema
Data una grammatica G di tipo 2 è decidibile stabilire se L(G) = ∅.
quindi, per esclusione:
Teorema
Data una grammatica G di tipo 2 è decidibile stabilire se L(G) è
finito ma non vuoto.
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
85 / 91
Forme Normali
Predicati Decidibili
Appartenenza ad un linguaggio libero
Teorema
Data una grammatica G di tipo 2 ed una stringa sul suo alfabeto
w ∈ Σ∗ è decidibile stabilire se w ∈ L(G)
È questo il lavoro svolto da ogni parser per un dato ling. di
programmazione: controllare se una stringa (prog. sorgente) è
corretta rispetto alle regole della grammatica.
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
86 / 91
Forme Normali
Predicati Decidibili
Parsing: Algoritmo CYK I
Data G = (Σ, V , S, P) libera in CNF, algoritmo di
COCKE-YOUNGER-KASAMI per decidere se z = a1 · · · an ∈ L(G)
Passi Consideriamo le vi,j = ai · · · aj , con |vi,j | = j − i + 1:
1. Per ogni vi,i : |vi,i | = 1 (quindi vi,i = ai ∈ Σ)
si trova l’insieme Xi,i ∈ ℘(V ) dei NT A tali che A −→ ai ∈ P
2. Per ogni vi,i+1 : |vi,i+1 | = 2
si trova Xi,i+1 ∈ ℘(V ) degli A tali che A
..
..
.
.
∗
=⇒ vi,i+1
..
.
..
.
n-1. Per le 2 sottostringhe v1,n−1 e v2,n , |v1,n−1 | = |v2,n | = n − 1
si trova X1,n−1 ∈ ℘(V) 8risp. X2,n ∈ ℘(V)) degli A tali che
∗
∗
A =⇒ v1,n−1 (risp. A =⇒ v2,n )
n. Per z = v1,n : |v1,n | = n
∗
si trova X1,n ∈ ℘(V) degli A tali che A =⇒ v1,n
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
87 / 91
Forme Normali
Predicati Decidibili
Parsing: Algoritmo CYK II
z ∈ L(G) se S ∈ X1,n
...
n−1
n
1 X1,1 X1,2 X1,3
...
X1,n−1
X1,n
2
X2,2 X2,3
...
X2,n−1
X2,n
3
X3,3
...
X3,n−1
X3,n
..
..
.
..
.
1
n−1
2
3
.
Xn−1,n−1 Xn−1,n
n
N. Fanizzi
Linguaggi di prog.+Lab
Xn,n
Linguaggi Liberi da Contesto
1 maggio 2014
88 / 91
Forme Normali
Predicati Decidibili
Parsing: Algoritmo CYK III
G = (Σ, V , S, P): grammatica
z = x1 · · · xn : stringa
Output d: boolean
Var
Σ: matrice n × n triangolare a valori in ℘(V )
Input
for each (i, j) ∈ {1, . . . , n} × {1, . . . , n} do Xi,j ← ∅
for i ← 1 to n do
for each A ∈ V do
if ∃(A −→ xi ) ∈ P then Xi,j ← Xi,j ∪ {A}
for s ← 2 to n do
for i ← 1 to n − s + 1 do
for k ← i to i + s − 2 do
if ∃B ∈ Xi,k ∧ ∃C ∈ Xk+1,i+s−1 ∧ ∃(A −→ BC) ∈ P
then Xi,i+s−1 ← Xi,i+s−1 ∪ {A}
return d ← (S ∈ X1,n )
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
89 / 91
Forme Normali
Predicati Decidibili
Parsing: Algoritmo CYK IV
Esempio
Controllare se G = (Σ, V , S, P) con produzioni CNF:
P = {S −→ AT | AB,
T −→ XB,
X −→ AT | AB,
A −→ a,
B −→ b}
possa generare aaabbb
1
2
3
4
5
6
1 {A}
∅
∅
∅
∅
{S, X}
2
{A}
∅
∅
{S, X} {T}
3
{A} {S, X} {T}
∅
4
{B}
∅
∅
5
{B}
∅
6
{B}
N. Fanizzi
Linguaggi di prog.+Lab
Linguaggi Liberi da Contesto
1 maggio 2014
90 / 91
Riferimenti
Ausiello G.; D’Amore F.; Gambosi G. 2003.
Linguaggi, Modelli, Complessità.
FrancoAngeli.
Cohen D. I. 1996.
Introduction to Computer Theory.
Wiley.
Hopcroft J. E.; Motwani R.; Ullman J. D. 2009.
Automi, Linguaggi e Calcolabilità.
Pearson Italia, 3a edizione.
Linz P. 2012.
An Introduction to Formal Languages and Automata.
Jones & Bartlett, 5a edizione.
Moll R. N.; Arbib M. A.; Kfoury A. J. 1988.
An introduction to formal language theory.
Springer.
Sipser 2005.
Introduction to the theory of computation.
Thomson, 2a edizione.
Sudkamp 2006.
Languages and Machines.
Addison-Wesley, 3a edizione.