Introduzione: Linguaggi Formali - LACAM

Introduzione:
Linguaggi Formali
Nicola Fanizzi
Corso di Linguaggi di Programmazione
Dipartimento di Informatica
Università degli Studi di Bari
10 marzo 2014
Sommario
3
1
Nozioni Preliminari
Alfabeti e Stringhe
Parti di una stringa
Prodotto
Prodotto e Struttura di
Monoide
Potenze e Chiusure di
Alfabeti
2
Linguaggi Formali
Definizione
Operazioni sui Linguaggi
Proprietà delle
Operazioni
N. Fanizzi
Linguaggi di prog.+Lab
Rappresentazioni Finite per
i Linguaggi
Grammatiche Generative
Derivazioni
Linguaggio Generato da una
Grammatica
Esercizi sulle Grammatiche
La Gerarchia di Chomsky
Tipi di Grammatiche e Classi
di Linguaggi
Teorema della Gerarchia
Automi
Schema di una Macchina
Transizioni
Computazioni
Determinismo
Tipologie
Introduzione: Linguaggi Formali
10 marzo 2014
2 / 52
Nozioni Preliminari
Alfabeti e Stringhe
Alfabeti e Stringhe I
Un alfabeto è un insieme di simboli finito e non vuoto di
simboli
Esempi
Σ = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} alfabeto delle cifre decimali
Σ0 = {a, b, c, . . . , z} alfabeto delle lettere (minuscole)
Una stringa (o parola, word) w su un alfabeto Σ
è una sequenza finita di simboli s1 s2 · · · sn tale che
∀i ∈ {1, . . . , n} : si ∈ Σ.
La lunghezza di w è pari ad n e si denota con |w|.
La stringa vuota, denotata1 con , è la parola priva di simboli
(|| = 0)
Esempio Alcune stringhe su Σ0 sono aaba, aca, cbaa, b, . . .
Dato Σ = {0, 1} sia w = 0010110 con |w| = 7
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
3 / 52
Nozioni Preliminari
Alfabeti e Stringhe
Alfabeti e Stringhe II
Si denota con Σ∗ l’insieme di tutte le stringhe su Σ.
Osservazione ∀Σ : ∈ Σ∗
Esempio Dato Σ = {0, 1} risulta
Σ∗ = {, 0, 1, 00, 01, 10, 11, 000, 001, . . .}
Data w = s1 s2 · · · sn su Σ, la sua stringa riflessa2 (o
inversione)
sarà wR = sn sn−1 · · · s1 , definita anche con:
w |w| < 2
wR =
svR w = vs, s ∈ Σ
Esempio Data w = abbaa : wR = aabba
1
2
Su alcuni testi denotata con .
Se w = wR , la stringa w si dice palindroma
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
4 / 52
Nozioni Preliminari
Alfabeti e Stringhe
Nomenclatura: parti di una stringa
Data la stringa
w = uvy
tale che u, v, y ∈ Σ∗ ,
u è un prefisso di w,
y è un suffisso di w e
v è una sottostringa di w
Esempio
w = 00110
prefissi di w: , 0, 00, 001, 0011 e w
suffissi di w: , 0, 10, 110, 0110 e w
sottostringhe di w:
, 0, 1, 00, 01, 10, 11, 001, 011, 110, 0011, 0110 e w
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
5 / 52
Nozioni Preliminari
Prodotto
Prodotto e Struttura di Monoide I
Date u, v ∈ Σ∗ tali che u = s1 · · · sm e v = s01 · · · s0n la
concatenazione (o prodotto) di u e v è data dalla stringa uv
(denotata anche u · v) di lunghezza m + n con i primi m
simboli uguali a quelli di u e gli ultimi n uguali a quelli di v:
w = uv = s1 · · · sm s01 · · · s0n
Il prodotto · : Σ∗ × Σ∗ → Σ∗
ha per elemento neutro gode della proprietà associativa: u · (v · w) = (u · v) · w
non è commutativo
pertanto (Σ∗ , ·) è un monoide (non commutativo)
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
6 / 52
Nozioni Preliminari
Prodotto
Prodotto e Struttura di Monoide II
Proposizione
∀u, v ∈ Σ∗ :
|uv| = |u| + |v|
Dim.
(per esercizio.)
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
7 / 52
Nozioni Preliminari
Prodotto
Potenze e Chiusure di Alfabeti
Data w∈ Σ∗ , potenza k-esima di w:
k=0
wk =
wwk−1 k > 0
Potenza
di un alfabeto:
{}
k=0
Σk =
Σ · Σk−1 k > 0
Σ1 = Σ
Σ2 = Σ · Σ = {s1 s2 | s1 , s2 ∈ Σ}
...
chiusura
S transitiva (o anche chiusura positiva) di Σ
Σ+ = k>0 Σk
chiusura riflessiva e transitiva (o anche chiusura star) di Σ
Σ∗ = Σ+ ∪ {}
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
8 / 52
Linguaggi Formali
Definizione
Linguaggi Formali – Definizione I
Definizione
Un linguaggio L su un alfabeto Σ è un sottoinsieme di Σ∗ :
L ⊆ Σ∗
Osservazioni
∅, {} e Σ sono linguaggi su Σ
Su alcuni testi: Λ ≡ ∅
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
(|∅| = 0 6= 1 = |{}|)
10 marzo 2014
9 / 52
Linguaggi Formali
Definizione
Linguaggi Formali – Definizione II
Esempi
Linguaggio finito L = {, aab, aaaabb}.
Linguaggio infinito L = {ai b2i | i ≥ 0}.
Linguaggio delle parentesi ben formate L ⊆ {(, )}∗ :
(())() ∈ L e
()(()()) ∈ L
mentre
(()() 6∈ L
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
10 / 52
Linguaggi Formali
Operazioni sui Linguaggi
Operazioni sui Linguaggi
Dati due linguaggi L e L0 definiti sullo stesso alfabeto Σ:
prodotto L · L0 = {w = w1 · w2 ∈ Σ∗ | w1 ∈ L ∧ w2 ∈ L0 }
iterazione L∗ = {w1 . . . wn ∈ Σ∗ | ∀n∀i : wi ∈ L, 0 ≤ i ≤ n}
unione L ∪ L0 = {w ∈ Σ∗ | w ∈ L ∨ w ∈ L0 }
complemento L = {w ∈ Σ∗ | w 6∈ L}
intersezione L ∩ L0 = {w ∈ Σ∗ | w ∈ L ∧ w ∈ L0 }
{}
se k = 0
k
potenza L =
k−1
L
· L se k > 0
S
chiusura L+ = k>0 Lk chiusura positiva
(transitiva, non riflessiva)
NB: L∗ = L0 ∪ L+ = {} ∪ L+
(transitiva e riflessiva)
riflessione LR = {wR | w ∈ L}
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
11 / 52
Linguaggi Formali
Proprietà delle Operazioni
Proprietà delle Operazioni sui Linguaggi
Dati i linguaggi L, L0 , L00 definiti sullo stesso alfabeto Σ:
1. (L · L0 ) · L00 = L · (L0 · L00 )
proprietà associativa
2. L · L0 6= L0 · L
non commutatività
3. L · {} = {} · L = L
elemento neutro
Quindi h℘(Σ∗ ), ·i è un monoide.
Si noti che Σ∗ può essere ottenuto come chiusura riflessiva del
linguaggio Σ (delle stringhe di lunghezza unitaria)
L·∅=∅·L=∅
Se ∈ L: L0 ⊆ L · L0 e L0 ⊆ L0 · L
∈ L∗
∅∗ = {}
4.
5.
6.
7.
3
elemento assorbente3
Su alcuni testi Λ = ∅
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
12 / 52
Linguaggi Formali
Proprietà delle Operazioni
Esempi
Esempio
Dati i linguaggi L1 = {a2n | n ≥ 0} e L2 = {b, cc}
L1 · L2 = {b, cc, aab, aacc, aaaab, aaaacc, . . .}
L2 · L1 = {b, cc, baa, ccaa, baaaa, ccaaaa, . . .}
verificata quindi la proprietà 5)
Inoltre:
L1 ∪ L2 = L2 ∪ L1 = {, b, cc, aa, aaaa, aaaaaa, . . .}
(L1 )∗ = {, aa, aaaa, aaaaaa, aaaaaaaa, . . .}
(L2 )∗ = {, b, cc, bb, bcc, ccb, bbb, cccc, . . .}
(L2 )0 = {}
(L2 )1 = {b, cc}
(L2 )2 = {bb, bcc, ccb, cccc} . . .
(L2 )+ = {b, cc, bb, bcc, ccb, bbb, cccc, . . .}
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
13 / 52
Rappresentazioni Finite per i Linguaggi
Rappresentazioni Finite per i Linguaggi
I linguaggi possono essere riguardati sotto due punti di vista:
Generativo: come generare le parole w di L ?
L potrebbe essere infinito (estensione) ma
enumerabile mediante un numero finito di regole
(intensione)
strumento formale: grammatiche generative
Riconoscitivo: come decidere se w ∈ L ?
È il punto di vista dei compilatori in fase d’analisi
sintattica (o lessicale)
strumento formale: automi
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
14 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
Grammatica Generativa I
Definizione (Grammatica)
Una grammatica generativa è una quadrupla G = (Σ, V, S, P)
con
Σ alfabeto terminale, ins. finito, non vuoto
V alfabeto non terminale (NT), ins. finito con Σ ∩ V = ∅
S ∈ V simbolo di partenza (start) o distintivo (assioma)
P insieme delle regole di produzione (α, β), denotate anche
con
α −→ β
dove
α ∈ (Σ ∪ V )+
e contiene almeno un non-terminale
β ∈ (Σ ∪ V )∗
può essere anche Una regola α −→ si dice -produzione
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
15 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
Grammatica Generativa II
Osservazioni
(α, β) ∈ [(Σ ∪ V )∗ · V · (Σ ∪ V )∗ ] × (Σ ∪ V)∗
Si usa la notazione abbreviata
α −→ β1 | β2 | . . . | βn
per riassumere le produzioni:
α −→ β1
α −→ β2
..
.
α −→ βn
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
16 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
Derivazioni I
Data G = (Σ, V, S, P) e due stringhe φ = γαδ ∈ (Σ ∪ V )+ e
ψ = γβδ ∈ (Σ ∪ V )∗ con α, β, γ, δ ∈ (Σ ∪ V)∗ ,
φ deriva direttamente ψ, denotato con φ =⇒ ψ, sse
∃α −→ β ∈ P
Dato un ordinamento su P, =⇒ denota una derivazione
i
i
diretta nella quale si applica la produzione i-esima α −→ β
∗
=⇒ chiusura transitiva e riflessiva di =⇒
+
=⇒ chiusura transitiva di =⇒:
∗
φ deriva ψ, denotato con φ =⇒ ψ, sse
φ = ψ oppure
∃φ0 , φ1 , . . . , φn ∈ (Σ ∪ V)+ , con φ0 = φ, e φn = ψ, tali che:
φi−1 =⇒ φi ∀i ∈ {1, . . . , n}
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
17 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
Derivazioni II
n
=⇒ denota una derivazione in n passi
(n lunghezza della derivazione)
∗
φ ∈ (Σ ∪ V)∗ è una forma di frase di G sse: S =⇒ φ
Data G = ({a, b}, {S}, S, P) con
Esempio
1
2
P = {S −→ , S −→ aSbb}
S =⇒ aSbb =⇒ aaSbbbb =⇒ aabbbb = a2 b4
2
N. Fanizzi
Linguaggi di prog.+Lab
2
1
Introduzione: Linguaggi Formali
10 marzo 2014
18 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
Derivazioni III
Esempio
Data G = ({a, b}, {A, B, C, S}, S, P) con
P = {S −→ aAS | bBS | C,
Aa −→ aA,
Ba −→ aB,
Ab −→ bA,
Bb −→ bB,
BC −→ Cb,
AC −→ Ca,
C −→ }
Si genera L(G) = {ww | w ∈ {a, b}∗ }
S=⇒ aAS =⇒ aAbBS =⇒ aAbBC
1
3
2
=⇒ abABC =⇒ abACb =⇒ abCab =⇒ abab
6
N. Fanizzi
Linguaggi di prog.+Lab
8
9
Introduzione: Linguaggi Formali
10
10 marzo 2014
19 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
Linguaggio Generato da una Grammatica
Definizione (Linguaggio Generato da una Grammatica)
Data la grammatica G = (Σ, V , S, P),
dicesi linguaggio generato dalla grammatica G
l’insieme delle stringhe di simboli terminali derivabili da S:
∗
L(G) = {w ∈ Σ∗ | S =⇒ w}
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
20 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
Esempi I
Grammatica per generare L = {an bn+1 | n > 0}:
G = ({a, b}, {S, A}, S, P) con
P = {S −→ Ab, A −→ aAb | ab}
Grammatica per generare il linguaggio dei numeri binari
pari:
G1 = ({0, 1}, {S1 , U}, S1 , P1 ) con
P1 = {S1 −→ 0 | 0S1 | US1 , U −→ 1}
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
21 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
Esempi II
Grammatica per generare L = {1n 0 | n ≥ 0}:
G2 = ({0, 1}, {S2 , A}, S2 , P2 ) con
P2 = {S2 −→ A0 | 0, A −→ A1 | 1}
Osservazione L(G2 ) ( L(G1 )
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
22 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
Esempi III
2
Lquad = {an | n > 0}
[Ausiello et al.,(2003)]
Gquad = ({a}, {S, A, B, E, R, X}, S, P)

S −→




B
−→




RA
−→




 Ra −→
RE −→
P=


 B −→




XA −→




Xa −→


XE −→
N. Fanizzi
Linguaggi di prog.+Lab
BRAE
BRAA
aAR
aR
E
X
X
aX
Introduzione: Linguaggi Formali



























10 marzo 2014
23 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
Esempi IV
idea: 1 + 3 + 5 + · · · + (2n − 1) = n2
B = BEGIN
E = END: segnaposto
le prod. 1 e 2 (S −→ BRAE, B −→ BRAA)
creano forme di frase B(RAA)k RAE per qualche k ≥ 0
ogni R ha un numero dispari di A alla sua destra
ogni R si sposta verso destra (RA −→ aAR Ra −→ aR)
creando una nuova a per ogni A che si incontra
la R cade quando incontra la E (RE −→ E)
infine B si trasforma in X facendo cancellare le A, la X e la E
(prod. 6 − 9)
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
24 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
Esempi V
S =⇒ BRAE =⇒ BaARE =⇒ BaAE =⇒ XaAE =⇒ aXAE =⇒
aXE =⇒ a
∗
S =⇒ BRAARAE =⇒ BRAARAARAE =⇒ BaARARAARAE =⇒
BaARARAAaARE =⇒ BaAaARRAAaARE =⇒
BaAaARaARAaARE =⇒ BaAaARaARAaAE =⇒
BaAaARaAaARaAE =⇒ BaAaAaRAaARaAE =⇒
BaAaAaaARaARaAE =⇒ BaAaAaaAaRARaAE =⇒
BaAaAaaAaaARRaAE =⇒ BaAaAaaAaaARaRAE =⇒
BaAaAaaAaaAaRRAE =⇒ BaAaAaaAaaAaRaARE =⇒
BaAaAaaAaaAaRaAE =⇒ BaAaAaaAaaAaaRAE =⇒
BaAaAaaAaaAaaaARE =⇒ BaAaAaaAaaAaaaAE =⇒
XaAaAaaAaaAaaaAE =⇒ aXAaAaaAaaAaaaAE =⇒
aXaAaaAaaAaaaAE =⇒ aaXAaaAaaAaaaAE =⇒
∗
aaXaaAaaAaaaAE =⇒ aaaaaaaaaXAE =⇒ aaaaaaaaaXE =⇒
aaaaaaaaa = a9
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
25 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
Equivalenza e Correttezza
Osservazione Dato un linguaggio L, possono esistere diverse
grammatiche che lo generano
Due grammatiche G e G0 sono equivalenti sse L(G) = L(G0 )
In generale, dati un linguaggio L ed una grammatica G, non
esiste un algoritmo in grado di dimostrare che L = L(G):
Teorema
Il problema generale di dimostrare la correttezza di una
grammatica non è risolvibile per via algoritmica
L’equivalenza si può dimostrare per induzione
L ⊆ L(G), i.e. G genera solo stringhe di L
L(G) ⊆ L, i.e. L contiene solo stringhe generabili da G
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
26 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
Esercizi
1
2
3
4
5
6
7
8
Determinare una grammatica che generi {an bn | n > 0}.
Data G = (Σ, V, S, P) con Σ = {0, 1}, V = {S, A, B} e
P = {S −→ 0B|1A, A −→ 0|0S|1AA, B −→ 1|1S|0BB}
determinare L(G).
Determinare una grammatica che generi {an b2n | n > 0}.
Determinare una grammatica che generi
{ak bn c2k | n, k > 0}
Data G = ({a, b}, {S}, S, P) con
P = {S −→ | SS | aSb | bSa}, dimostrare che
L(G) = {w | na (w) = nb (w)}
Data G = ({a, b, c}, {S, A}, S, P) con
P = {S −→ aSc | A, A −→ bAc | } dimostrare che
L(G) = {an bm cn+m | n + m > 0}.
Data G = ({a, b, c}, {S, A}, S, P) con
P = {S −→ Ab, A −→ Sa}, dimostrare che L(G) = ∅.
Definire una grammatica che generi
{0n 1m 2k | n = m ∨ m = k} e dimostrarne la correttezza.
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
27 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
Esempio (6.)
Data G = ({a, b, c}, {S, A}, S, P) con
P = {S −→ aSc | A, A −→ bAc | } dimostrare che
L(G) = {an bm cn+m | n + m > 0}.
Dim.
Occorre dimostrare (per induzione):
L ⊆ L(G): sulla lunghezza delle derivazioni da S di G
L(G) ⊆ L: sulla lunghezza delle stringhe di L
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
28 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
L(G) ⊆ L
Si osservi che, essendo P = {S −→ aSc | A, A −→ bAc | },
ogni forma di frase di G è del tipo:
ak Sck , con k ≥ 0 oppure
ak bj Ack+j , con k, j ≥ 0
Ogni z ∈ L(G) è generata da derivazioni del tipo:
k
j
1
1
S =⇒ ak Sck =⇒ ak Ack =⇒ ak bj Acj ck =⇒ ak bj ck+j
Quindi z ∈ L.
L ⊆ L(G)
Sia z = an bm cn+m ∈ L.
Può essere generata con una derivazione del tipo:
n
1
m
1
S =⇒ an Scn =⇒ an Acn =⇒ an bm Acm cn =⇒ an bm cn+m
Quindi, esistendo una derivazione, z ∈ L(G).
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
29 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
Gerarchia delle Grammatiche
In base alla forma delle produzioni,
si distinguono i tipi seguenti:
0
grammatiche generative (a forma di frase), senza
limitazioni:
A ∈ V, α, β, ω ∈ (Σ ∪ V)∗
αAβ −→ ω
1
grammatiche dipendenti da contesto (o context-sensitive,
CS):
αAβ −→ αωβ
S −→ 2
A ∈ V , α, β ∈ (Σ ∪ V)∗ , ω ∈ (Σ ∪ V)+
se S non compare in alcuna parte destra
grammatiche libere da contesto (o context-free, CF):
A ∈ V, ω ∈ (Σ ∪ V)∗
A −→ ω
3
grammatiche lineari destre (o regolari):
A −→ sB
A −→ σ
A, B ∈ V, s ∈ Σ
A ∈ V, σ ∈ Σ ∪ {}
Un linguaggio è di tipo i se viene generato da una grammatica di tip
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
30 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
Tipi di Grammatiche e Classi di Linguaggi I
Esistono linguaggi per cui non esiste una grammatica
corrispondente
0
La classe più ampia nell’ambito dei linguaggi descrivibili con
grammatiche.
L = {an bf (n) | n > 0}
dove f è una qualunque funzione RE
[Ausiello et al.,(2003)]
Le grammatiche ammettono prod. che accorciano le forme di
frase.
Quelle che non accorciano si dicono grammatiche monotòne,
ossia con produzioni: α −→ β con |α| ≤ |β|
Esempi grammatiche G = (Σ, V, S, P)
Gquad
P = {S −→ aSa|aAb|aAa|, aAa −→ a|, aaAb −→ b|}
P = {S −→ aAb, aA −→ aaAb, A −→ }
(ma il ling. generato è più semplice, quale?)
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
31 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
Tipi di Grammatiche e Classi di Linguaggi II
1
Su alcuni testi prod. CS definite come prod. monotone:
Per un teorema: i ling. monotoni sono tutti di tipo 1 (anziché
0).
Trasformando la gramm. monotona
P = {S −→ E | , C −→ a, D −→ b,
E −→ aAE | bBE | Ca | Db,
Aa −→ aA, Ab −→ bA,
Ba −→ aB, Bb −→ bB,
AC −→ Ca, BC −→ Cb,
AD −→ Da, BD −→ Db}
Esempi G = (Σ, V, S, P)
P = {S −→ aSa|aAb|aAa, aA −→ aa, Ab −→ aab}
P = {S −→ aBSc|abc, Ba −→ aB, Bb −→ bb}
quale ling. genera ?
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
32 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
Tipi di Grammatiche e Classi di Linguaggi III
2
La classe usata per definire i ling. di programmazione
Esempi
G = ({(, )}, {S}, S, {S −→ () | SS | (S)}
G = ({+, *, i, (, )}, {E, T, F}, E, P)
con P = {E −→ E+T|T, T −→ T *F|F, F −→ i|(E)}
3
Lineari destre: a destra di ogni produzione,
e quindi nelle f.d.f. di ogni derivazione, al più un
non-terminale (come simbolo più a destra).
Si dicono anche regolari perché i ling. generati sono
rappresentabili tramite espressioni regolari
linguaggi finiti
linguaggio delle stringhe binarie {0, 1}∗
linguaggio delle stringhe su {0, 1} con un numero pari di 1
Esempi
G = ({a, b}, {S}, S, {S −→ aS|b}) genera L = {an b|n ≥ 0}
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
33 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
Tipi di Grammatiche e Classi di Linguaggi IV
I linguaggi regolari si possono generare anche tramite
grammatiche lineari sinistre, ossia con produzioni del tipo:
A −→ β
A ∈ V, β ∈ (V · Σ) ∪ Σ ∪ {}
G0 = ({a, b}, {S, A}, S, {S −→ Ab|b, A −→ Aa|a}): L(G0 ) = L
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
34 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
Teorema della Gerarchia I
Teorema (gerarchia)
Dato un alfabeto Σ
denotate le classi di linguaggi nel seguente modo
Li = {L ⊆ Σ∗ | ∃G grammatica di tipo i : L = L(G)}
L0 RE
L1 CS
L2 CF
L3 REG
risulta: L3 ( L2 ( L1 ( L0
Dim.
N. Fanizzi
Si dimostra provando la catena di inclusioni:
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
35 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
Teorema della Gerarchia II
(L3 ( L2 ) Si osservi che L3 ⊆ L2 per definizione, occorre solo
provare l’inclusione stretta usando un
linguaggio separatore, per es. {ak bk | k > 0}
(L2 ( L1 ) Per la forma delle produzioni vale L2 ⊆ L1 ,
tranne nel caso di -produzioni: A −→ con A 6= S
Per il lemma della stringa vuota,
∀L ∈ L2 ∃G CF senza -regole,
tranne S −→ se ∈ L,
tale che L(G) = L
Linguaggio separatore: {ak bk ck | k > 0}
(L1 ( L0 ) Per definizione L1 ( L0 .
Linguaggio separatore: L tale che le stringhe di L siano
¯
enumerabili ma non quelle di L
∃ML mdT che ∀z ∈ L, ML termina accettando z,
¯ per la quale ML diverge
mentre ∃¯
z∈L
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
36 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
Generazione della Stringa Vuota I
Per i tipi 1, 2, 3, -produzioni sono ridondanti;
[Ausiello et al.,(2003)]
la generazione della stringa vuota può essere limitata all’assioma
S −→ Se G = (Σ, V, S, P) di tipo 1, 2 o 3 (senza -produzioni) genera
L, per generare L ∪ {} è sufficiente utilizzare
G0 = (Σ, V ∪ {S0 }, S0 , P0 ) dove
P0 = P ∪ {S0 −→ } ∪ {S0 −→ β | S −→ β ∈ P}
Se S non appare nella parte destra di alcuna produzione,
si può anche aggiungere S −→ senza conseguenze
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
37 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
Generazione della Stringa Vuota II
Esempio
Data G = (Σ, V, S, P), con
P = {S −→ aBSc|abc, Ba −→ aB, Bb −→ bb} tale che
L(G) = {an bn cn |n > 0}.
Per generare anche = a0 b0 c0 , si definisce
G0 = (Σ, V ∪ {S0 }, S0 , P0 ) con P0 = {S0 −→ |aBSc|abc} ∪ P
Data G = (Σ, V, S, P), con
P = {S −→ Ub, U −→ ab|S}
si genera L(G) = {abh bb | h ≥ 0}.
Aggiungendo S −→ a P0 , G0 genererebbe, oltre , anche le
stringhe di {bbk | k ≥ 0}
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
38 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
Generazione della Stringa Vuota III
Teorema
Data G di tipo 0, esiste G0 , ottenuta estendendo con opportune
-produzioni una grammatica monotona (di tipo 1) equivalente a G
Dim. (cenni) Si aggiunge X −→ con X nuovo NT e sostituisce
ad ogni φ −→ ψ tale che |φ| > |ψ| > 0 con φ −→ ψ X
· · X}
| ·{z
|φ|−|ψ| volte
Esempio
Sia G = (Σ, V, S, P) con produzioni monotone tranne AB −→ C.
Si può costruire G = (Σ, V ∪ {H}, S, P0 ), con
P0 = P \ {AB −→ C} ∪ {AB −→ CH, H −→ }
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
39 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
Generazione della Stringa Vuota IV
Nel caso di grammatiche di tipo 2 o 3 l’aggiunta di -produzioni
non altera il potere generativo delle grammatiche:
Teorema
Data una grammatica G con produzioni libere (regolari) anche
vuote, esiste una grammatica libera (regolare) G0 priva di
-produzioni, tale che:
L(G0 ) = L(G) \ {}
Dim. (cenni)
tipo 2: algoritmo basato sull’individuazione dei NT annullabili
tipo 3: più semplice
Osservazione Se ∈ L basta aggiungere S −→ N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
40 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
Generazione della Stringa Vuota V
Esempi
La grammatica libera con produzioni
{S −→ AB|aB|B, A −→ ab|aB, B −→ cX|X, X −→ }
si modifica in
{S −→ AB|aB|B, A −→ ab|aB, B −→ c|}
e quindi in
{S −→ AB|aB|B|A|a|, A −→ ab|aB|a, B −→ c}
Nella grammatica regolare con produzioni
{S −→ bX|aB, B −→ cX, X −→ }
si elimina la produzione vuota riscrivendo nella forma:
{S −→ b|aB, B −→ c}
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
41 / 52
Rappresentazioni Finite per i Linguaggi
Grammatiche Generative
Linguaggi, Grammatiche, Macchine
Riconoscitrici
Tipo
Grammatiche
Linguaggi
0
senza
restrizioni
—
ricorsivamente
enumerabili (RE)
ricorsivi
1
2
3
N. Fanizzi
Macchine
macchina
di Turing
decider MdT
(si fermano sempre)
dipendenti da
dipendenti da
automi LBA
contesto (CSG)
contesto (CSL)
limitati lineramente
indicizzate
indicizzati
PDA a stack incorporati
stack annidati + lettura pila
a riscrittura di alberi leggermente contestuali
PDA a stack incorporati
TAG
(mildly CS)
EPDA
libere
liberi
PDA
(CFG)
(CFL)
non deterministici
libere
liberi
PDA
deterministiche (LL/LR)
deterministici
deterministici
—
a parole annidate
FSA per NWL
visibly pushdown (NWL)
FNWA
lineari
lineari
automa a stati finiti
(regolari)
(regolari)
FSA (NDA)
—
senza
aciclici
cicli
finito
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
42 / 52
Rappresentazioni Finite per i Linguaggi
Automi
Automi
Modelli astratti di macchine
in input su un nastro T, fatto da celle contenenti un simbolo
ciascuna, stringhe su un dato alfabeto d’ingresso Σ
RO o RW
lettura L-to-R (con/senza EOF)
un simbolo alla volta
possono prevedere anche la produzione di output
(analogamente)
possono avere memoria temporanea S: nastro illimitato,
contenente simboli su un (diverso) alfabeto Γ
una unità di controllo a stati finiti determina il
funzionamento della macchina
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
43 / 52
Rappresentazioni Finite per i Linguaggi
Automi
Schema di una Macchina
T
···
b
a
b
a
a
a
···
H
..
q3
q2
q0
CU
N. Fanizzi
Linguaggi di prog.+Lab
qn
δ
q1
γ1
.
γ2
γ2 S
γ3
γ1
Introduzione: Linguaggi Formali
10 marzo 2014
44 / 52
Rappresentazioni Finite per i Linguaggi
Automi
Transizioni
Ad ogni passo (tempo discreto):
l’unità di controllo determina transizioni di stato in base a:
stato corrente q
simbolo in input dal nastro T
(contenuto della memoria temp. S)
secondo una funzione di transizione δ (programma)
può anche (automi più complessi)
cambiare la memoria temp. S
produrre un output su T
si muove sul prossimo simbolo su T
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
45 / 52
Rappresentazioni Finite per i Linguaggi
Automi
Configurazioni della Macchina
Configurazione c di M determinata da:
1
stato interno corrente dell’automa;
2
contenuto di tutti i nastri di memoria;
3
posizione di tutte le testine sui nastri.
L’applicazione della funzione di transizione ad una
configurazione si dice transizione o mossa o passo
computazionale dell’automa.
δ induce una relazione di transizione tra configurazioni, che
associa ad una configurazione una (o più di una) configurazione
successiva:
date due configurazioni ci , cj
ci ` cj
indica che cj deriva da ci (per effetto dell’applicazione4 di δ)
4
A volte si trova `δ o `M , per maggiore precisione.
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
46 / 52
Rappresentazioni Finite per i Linguaggi
Automi
Computazioni
Alcune configurazioni sono definite di accettazione.
Tutte le altre sono considerate di non accettazione (o di
rifiuto)
Una computazione eseguita da M a partire da una config.
iniziale c0 è una sequenza c0 , c1 , c2 , . . . tale che ∀i : ci ` ci+1 .
∗
` indica la chiusura transitiva e riflessiva della relazione `
∗
Se c0 ` cn con una seq. finita (massimale5 )
allora la computazione termina:
computazione di accettazione se cn è una config. di
accettazione,
altrimenti è una computazione di rifiuto
5
∗
ossia tale che 6 ∃c : cn ` c.
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
47 / 52
Rappresentazioni Finite per i Linguaggi
Automi
Automi – Determinismo
deterministico ogni passo è determinato univocamente dalla
configurazione corrente
c0
c1
c2
c3
c4
c5
···
non-deterministico la configurazione corrente può determinare
transizioni alternative
c3
c0
c1
c2
c5
···
c6
c8
···
c7
c9
···
c4
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
48 / 52
Rappresentazioni Finite per i Linguaggi
Automi
Tipologie di Automi
accettori6 output determinato dallo stato raggiunto (stati finali)
decidono se la stringa sul nastro appartiene ad
un linguaggio
risposta sì/no
trasduttori in base alla stringa in input, producono una stringa
in output
6
detti anche riconoscitori.
N. Fanizzi
Linguaggi di prog.+Lab
Introduzione: Linguaggi Formali
10 marzo 2014
49 / 52
Rappresentazioni Finite per i Linguaggi
Automi
Riconoscitore
l,u
q0
q1
l,n,u
n
q2
N. Fanizzi
Linguaggi di prog.+Lab
l,n,u
Introduzione: Linguaggi Formali
10 marzo 2014
50 / 52
Rappresentazioni Finite per i Linguaggi
Automi
Trasduttore
(0,1)/1
q0
(0,0)/0
(1,0)/1
N. Fanizzi
(1,1)/0
Linguaggi di prog.+Lab
(0,1)/0
q1
(0,0)/1
Introduzione: Linguaggi Formali
(1,1)/1
(1,0)/0
10 marzo 2014
51 / 52
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.