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.
© Copyright 2024 Paperzz