Your SlideShare is downloading. ×
0
LFC




                                     Formalismi
                                     generativi
                  ...
LFC
Linguaggi formali e compilazione
                                      Formalismi
                                    ...
LFC
Linguaggi formali e compilazione
                                      Formalismi
                                    ...
LFC
Linguaggi regolari
                                                               Formalismi
                         ...
LFC
Esempi di linguaggi regolari
                                                                Formalismi
              ...
LFC
Altri esempi
                                                             Formalismi
                                 ...
LFC
Espressioni regolari
                                                              Formalismi
                        ...
LFC
Espressioni regolari
                                                            Formalismi
Segue definizione di e.r.  ...
LFC
Espressioni regolari
                                                           Formalismi
                           ...
LFC
Esempi
   L’espressione regolare 0 + 1∗ 10 su B (interpretabile      Formalismi
                                      ...
LFC
Abbreviazioni di uso pratico
                                                                Formalismi
              ...
LFC
Abbreviazioni di uso pratico
                                                                Formalismi
              ...
LFC
Esempi di interesse nel contesto dei
linguaggi di programmazione
                                                     ...
LFC
Esercizi proposti
    Scrivere un’e.r. per il seguente linguaggio              Formalismi
                            ...
LFC
Esercizi proposti
                                                             Formalismi
                            ...
LFC
Linguaggi formali e compilazione
                                      Formalismi
                                    ...
LFC
Grammatiche formali
                                                           Formalismi
   Come le espressioni regol...
LFC
Definizione formale di grammatica
    Una grammatica G è una quadrupla di elementi:         Formalismi
                ...
LFC
Un primo esempio di grammatica libera
                                                              Formalismi
       ...
LFC
Derivazioni
                                                             Formalismi
                                  ...
LFC
Derivazioni (continua)
                                                               Formalismi
    Sia α = βAγ, dove...
LFC
Esempi
                                                       Formalismi
Chiamiamo G1 la grammatica precedentemente   ...
LFC
Frasi e linguaggio generato da una
grammatica
                                                            Formalismi
 ...
LFC
Esempi
                                                           Formalismi
                                         ...
LFC
Un esempio più complesso: le e.r. come
linguaggio libero
                                                             ...
LFC
Esempio
   La stringa (epressione regolare) 0(0+1)∗       Formalismi
   appartiene a L(G2 ) causa la derivazione:     ...
LFC
Linguaggio generato da una grammatica
(continua)
                                                            Formalism...
LFC
Esempio
   Si consideri laseguente grammatica:                    Formalismi
                                         ...
LFC
Esempio (continua)
    Preliminarmente, osserviamo che una derivazione
                                               ...
LFC
Esempio (continua)
                                                            Formalismi
                            ...
LFC
Equivalenza
                                                        Formalismi
   Due grammatiche G e G si dicono equi...
LFC
Convenzioni notazionali
    I simboli non terminali, detti anche variabili         Formalismi
    sintattiche, verrann...
LFC
Descrizione succinta di una grammatica
                                                         Formalismi
           ...
LFC
Backus-Naur Form (BNF)
   Nella descrizione della sintassi dei linguaggi di     Formalismi
                           ...
LFC
Altri esempi
                                                                Formalismi
                              ...
LFC
Altre convenzioni
    Elementi opzionali possono essere inclusi fra i meta   Formalismi
                              ...
LFC
Altre convenzioni (continua)
                                                              Formalismi
    Più recentem...
LFC
Altre convenzioni (continua)
                                                            Formalismi
                  ...
LFC
Esercizi proposti
                                                             Formalismi
    Fornire una grammatica l...
LFC
Alberi di derivazione (parse tree)
    Un parse tree illustra graficamente il processo di               Formalismi
    ...
LFC
Esempi
                                                    Formalismi
                                                ...
LFC
Esempi
                                                             Formalismi
   Parse tree per la stringa           ...
LFC
Alberi di derivazione (parse tree)
    Un parse tree impone una struttura sintattica alle          Formalismi
        ...
LFC
Parse tree e derivazioni
                                                               Formalismi
                   ...
LFC
Derivazioni canoniche
                                                               Formalismi
    Si dice che S ⇒∗ α...
LFC
Esempio
   La frase id + id + id di G1 può essere ottenuta
                                                           ...
LFC
Ambiguità
   Abbiamo visto che ad una frase può corrispondere        Formalismi
                                      ...
LFC
Esempio
                                                            Formalismi
   La grammatica GI è ambigua in quanto...
LFC
Aspetti problematici per il parsing
Ci sono alcune caratteristiche delle grammatiche libere
                          ...
LFC
Esempi
   La grammatica                                        Formalismi
                                            ...
LFC
Esempi
   Nella grammatica
                                                      Formalismi
                          ...
LFC
Scrittura di una grammatica per il parsing
    Terminiamo questa parte del corso sulle CFG             Formalismi
    ...
LFC
Rimozione dei non terminali non ben definiti
                                                              Formalismi
 ...
LFC
Esempio
   Si consideri la grammatica G così definita:                Formalismi
                                      ...
LFC
Esempio (continua)
                                                              Formalismi
                          ...
LFC
Rimozione dei non terminali non raggiungibili
                                                             Formalismi
...
LFC
Esempio (continua)
    Eseguendo la BFS sul grafo corrispondente a G         Formalismi
                              ...
LFC
Eliminazione dei non terminali annullabili
                                                            Formalismi
    ...
LFC
Esempio
                                                         Formalismi
                                          ...
LFC
Esempio (continua)
    Dopo l’eliminazione delle produzioni del tipo: A →
                                            ...
LFC
Esempio (continua)
                                                       Formalismi
                                 ...
LFC
Eliminazione dei cicli
    I cicli, cioè derivazioni del tipo A ⇒+ A, sono non
                                       ...
LFC
Eliminazione dei cicli (continua)
                                                            Formalismi
             ...
LFC
Esempio
   Si consideri ancora la grammatica:             Formalismi
                                                 ...
LFC
Esempio (continua)
    La grammatica risultante (priva di cicli) è:    Formalismi
                                    ...
LFC
Eliminazione delle ricorsioni sinistre
                                                                  Formalismi
  ...
LFC
Eliminazione delle ricorsioni sinistre
(continua)
                                                                 For...
LFC
Eliminazione delle ricorsioni sinistre
(continua)
                                                          Formalismi...
LFC
Eliminazione delle ricorsioni sinistre
(continua)
                                                           Formalism...
LFC
Esempio
                                                         Formalismi
                                          ...
LFC
Esempio
   Consideriamo la grammatica così definita:
                                                         Formalism...
LFC
Eliminazione delle ambiguità
                                                              Formalismi
                ...
LFC
Ambiguità delle frasi condizionali
                                                           Formalismi
             ...
LFC
Ambiguità delle frasi condizionali (continua)
    Volendo modificare la grammatica, si introducono
                    ...
LFC
Esempio
   Consideriamo il seguente frammento di grammatica,       Formalismi
                                        ...
LFC
Esempio (continua)
                                S
                                                                 ...
LFC
Esempio (continua)
                   S
                                                                       Formali...
LFC
Ambiguità legata alla ricorsione
    Se una grammatica ammette (per almeno un simbolo
                                ...
LFC
Ambiguità legate all’unione di linguaggi
                                                         Formalismi
         ...
LFC
Esempio
   Sia G la grammatica (già vista) che genera il
                                                             ...
LFC
Ambiguità legate al concatenamento di
linguaggi
                                                          Formalismi
 ...
LFC
Esempio
   Il linguaggio L8 (delle stringhe del tipo an bm ck ) può   Formalismi
                                     ...
LFC
Precedenza degli operatori
                                                          Formalismi
    La grammatica G1 f...
LFC
Precedenza degli operatori (continua)
    Si osservi l’albero di derivazione della stringa         Formalismi
    id +...
LFC
Precedenza degli operatori (continua)
                                                              Formalismi
       ...
LFC
Precedenza degli operatori (continua)
                                                           Formalismi
          ...
LFC
Precedenza degli operatori (continua)
                                                             Formalismi
        ...
LFC
Esercizi
                                                          Formalismi
                                        ...
LFC
Esercizi
    Quali sono le produzioni inutili nella seguente
                                                      For...
LFC
Esercizi
    Si considerino le seguenti grammatiche per i          Formalismi
    linguaggi L8 ed L9 :                ...
LFC
Linguaggi formali e compilazione
                                      Formalismi
                                    ...
LFC
Grammatiche lineari
    Se le produzioni di una grammatica G sono tutte del      Formalismi
    tipo A → XB o A → X , ...
LFC
Esempi
                                                            Formalismi
                                        ...
LFC
Grammatiche dipendenti dal contesto
    Se la forma generale delle produzioni è del tipo:
                            ...
LFC
Linguaggi dipendenti dal contesto
    Sono così detti i linguaggi generabili da grammatiche   Formalismi
             ...
LFC
Classificazione di Chomsky
                                                            Formalismi
                     ...
LFC
Costrutti non liberi nei linguaggi di
programmazione
                                                             Form...
Upcoming SlideShare
Loading in...5
×

Linguaggi Formali Compilazione: Grammatiche

2,684

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,684
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
70
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "Linguaggi Formali Compilazione: Grammatiche"

  1. 1. LFC Formalismi generativi Espressioni regolari Grammatiche libere Altri tipi di grammatica Linguaggi formali e compilazione Corso di Laurea in Informatica A.A. 2008/2009
  2. 2. LFC Linguaggi formali e compilazione Formalismi generativi Espressioni regolari Grammatiche libere Altri tipi di grammatica Formalismi generativi Espressioni e linguaggi regolari Grammatiche libere Altri tipi di grammatiche
  3. 3. LFC Linguaggi formali e compilazione Formalismi generativi Espressioni regolari Grammatiche libere Altri tipi di grammatica Formalismi generativi Espressioni e linguaggi regolari Grammatiche libere Altri tipi di grammatiche
  4. 4. LFC Linguaggi regolari Formalismi generativi Espressioni regolari Un linguaggio L su un alfabeto Σ = {a1 , . . . , an } si Grammatiche libere Altri tipi di grammatica dice regolare se può essere espresso mediante composizione finita di operazioni di concatenazione, unione e chiusura riflessiva a partire dai linguaggi elementari (detti anche unitari) {a1 }, . . . , {an }. Ogni linguaggio finito è chiaramente regolare mentre ci sono abbondanti esempi di interessanti linguaggi infiniti che non sono regolari. Come vedremo, i linguaggi regolari giocano un ruolo importante nella definizione del lessico di un programma scritto in linguaggio ad alto livello, oltre che in svariati altri campi dell’Informatica.
  5. 5. LFC Esempi di linguaggi regolari Formalismi generativi Espressioni regolari Grammatiche libere Sia Σ l’alfabeto ASCII e sia X = X1 X2 . . . Xn una Altri tipi di grammatica generica stringa di Σ∗ . Il linguaggio {X } è regolare in quanto esprimibile come concatenazione dei linguaggi unitari {X1 }, {X2 }, . . . , {Xn }. Il linguaggio {X , Y , Z }, dove X , Y e Z sono stringhe generiche sull’alfabeto ASCII è regolare perché esprimibile come unione dei linguaggi regolari {X }, {Y }, e {Z }. Generalizzando l’esempio precedente si dimostra come ogni linguaggio finito sia esprimibile come unione di concatenzazioni di linguaggi unitari.
  6. 6. LFC Altri esempi Formalismi generativi Espressioni regolari Grammatiche libere Altri tipi di grammatica Il linguaggio L5 = {an bm |n, m ≥ 0} è regolare in quanto esprimibile nel modo seguente L5 = {a}∗ {b}∗ . I seguenti linguaggi, introdotti nel gruppo di lucidi introduttivi, sono tutti regolari: R {ab, c}2 , {ab, c}3 , {ab, c}∗ , {ab, c}+ , {ab, c}2 Il linguaggio L6 = {an bn |n ≥ 0} non è regolare. Il linguaggio L10 = {an |n primo} non è regolare.
  7. 7. LFC Espressioni regolari Formalismi generativi Espressioni regolari Grammatiche libere Le espressioni regolari su un alfabeto Σ sono un Altri tipi di grammatica formalismo che riflette (e semplifica) le costruzioni delineate sopra per la definizione di linguaggi regolari. Più precisamente, le espressioni regolari (e.r.)su Σ sono definite ricorsivamente nel modo seguente: Base. Φ è un’espressione regolare che denota l’insieme vuoto; per ogni a ∈ Σ, a è un’e.r. che denota l’insieme {a};
  8. 8. LFC Espressioni regolari Formalismi Segue definizione di e.r. generativi Espressioni regolari Grammatiche libere Concatenazione Se E ed F sono e.r., la scrittura EF è Altri tipi di grammatica un’e.r. che denota l’insieme di stringhe che possono essere scritte concatenando una stringa dell’insieme denotato da E (più brevemente diremo “una stringa di E”) con una stringa di F; Unione Se E ed F sono e.r., la scrittura E + F è un’e.r. che denota l’unione di E e di F. Chiusura Se E è un’e.r., la scrittura E ∗ è un’e.r. che denota l’insieme delle stringhe ottenute concatenando stringhe di E un numero arbitrario i ≥ 0 di volte.
  9. 9. LFC Espressioni regolari Formalismi generativi Espressioni regolari Grammatiche libere Altri tipi di grammatica Un’ulteriore regola Parentesi. Se E è un’e.r., la scrittura (E) è un’e.r. equivalente alla prima, cioè che denota lo stesso insieme di stringhe serve a forzare un ordine di composizione delle espressioni diverso da quello standard (in base al quale chiusura precede concatenazione che precede unione).
  10. 10. LFC Esempi L’espressione regolare 0 + 1∗ 10 su B (interpretabile Formalismi generativi come 0 + ((1∗ )10), in base alle regole di Espressioni regolari Grammatiche libere precedenza) denota il linguaggio Altri tipi di grammatica R1 = {0, 10, 110, 1110, . . .}. Il linguaggio R1 è chiaramente differente dal linguaggio R2 su B definito dall’espressione regolare (0 + 1)∗ 10, che consiste di tutte le stringhe binarie che terminano con 10. Posto Σ = {a, b, c}, l’espressione regolare a(b + c)∗ a denota il linguaggio R3 su Σ costituito dalle stringhe che iniziano e terminano con il carattere a e che non contengono altri caratteri a. La scrittura (1 + 01)∗ (0 + 1 + 01) denota il linguaggio delle stringhe su B di lunghezza maggiore di zero che non contengono due caratteri 0 consecutivi.
  11. 11. LFC Abbreviazioni di uso pratico Formalismi generativi Poiché { } = Φ∗ , si può utilizzare il simbolo Espressioni regolari per Grammatiche libere Altri tipi di grammatica indicare l’insieme { }. La scrittura [E] si può utilizzare al posto della e.r. E+ e l’operatore [ ] prende il nome di opzione. Se è definito un ordinamento fra i caratteri di Σ, allora si possono utilizzare convenzioni specifiche per denotare intervalli di caratteri. Ad esempio, la scrittura [a − f] denota i caratteri compresi fra a ed f (opzione su un intervallo). Poiché L+ = LL∗ , l’operatore di chiusura (non riflessiva) è ammesso nelle e.r. dove si intende che E + = EE ∗ .
  12. 12. LFC Abbreviazioni di uso pratico Formalismi n generativi Espressioni regolari Poiché Ln =LL . . . L, l’operatore di elevamento a Grammatiche libere Altri tipi di grammatica potenza è ammesso nelle e.r. e si intende che n En =EE . . . E. La scrittura [E]ji si può utilizzare al posto della e.r. E i + E i+1 + . . . + E j . Per alcuni insiemi di caratteri di particolare importanza (cifre, lettere, caratteri alfanumerici, caratteri di spaziatura, ...) si possono usare espressioni specifiche, come ad esempio (prendendo a prestito la notazione dalle espressioni riconosciute dal comando grep di Linux): [: digit :], [: alpha :], [: alnum :], [: space :], . . .
  13. 13. LFC Esempi di interesse nel contesto dei linguaggi di programmazione Formalismi generativi Espressioni regolari Grammatiche libere Osserviamo dapprima che nel contesto della Altri tipi di grammatica definizione della sintassi dei linguaggi di programmazione il simbolo + è spesso rimpiazzato da |. L’espressione regolare [1 − 9][: digit :]∗ denota l’insieme delle stringhe che rappresentano (nella consueta rappresentazione in base 10) i numeri interi positivi. L’espressione regolare [: alpha :]([: alpha :]|[: digit :])∗ denota l’insieme degli identificatori legali in alcuni linguaggi di programmazione (soprattutto fra i più vecchi).
  14. 14. LFC Esercizi proposti Scrivere un’e.r. per il seguente linguaggio Formalismi generativi sull’alfabeto {a, b, c}: Espressioni regolari Grammatiche libere Altri tipi di grammatica E1 = {an bm ck |m = 0 ⇒ k = 3} Scrivere un’e.r. per il linguaggio E2 , sull’alfabeto {a, b}, delle stringhe contenenti al più due a. Scrivere un’e.r. per il linguaggio E3 , sull’alfabeto {a, b}, delle stringhe contenenti un numero dispari di b. Scrivere un’e.r. per il linguaggio E4 , sull’alfabeto {a, b}, definito ricorsivamente nel modo seguente: 1. ∈ E4 ; 2. Se x ∈ E4 allora anche abax ∈ E4 e xaa ∈ E4 . Inoltre, solo le stringhe ottenibili in questo modo appartengono a E4 .
  15. 15. LFC Esercizi proposti Formalismi generativi Espressioni regolari Grammatiche libere Scrivere un’e.r. per il linguaggio E5 , sull’alfabeto Altri tipi di grammatica {a, b, c}, costituito dalle stringhe in cui ogni occorrenza di b è seguita da almeno un’occorrenza di c. Descrivere nel modo più semplice possibile, in Italiano, il linguaggio corrispondente alla seguente espressione regolare: ((a|b)3 )∗ (a|b). Si dica qual è la stringa più corta che non appartiene al linguaggio descritto dall’espressione regolare a∗ (ab)∗ b∗ .
  16. 16. LFC Linguaggi formali e compilazione Formalismi generativi Espressioni regolari Grammatiche libere Altri tipi di grammatica Formalismi generativi Espressioni e linguaggi regolari Grammatiche libere Altri tipi di grammatiche
  17. 17. LFC Grammatiche formali Formalismi Come le espressioni regolari, anche le grammatiche generativi Espressioni regolari formali sono uno strumento per la descrizione di Grammatiche libere Altri tipi di grammatica linguaggi. Sono un formalismo generativo perché il linguaggio è definito come l’insieme delle stringhe che possono essere “generate” usando le regole della grammatica. Le grammatiche libere (Context-Free Grammar o semplicemente CFG) sono un particolare tipo di grammatica formale che trova ampio uso nella definizione dei linguaggi di programmazione. Solo per fare un esempio, la struttura a blocchi dei programmi scritti in Pascal (C, C++, Java, ...) viene descritta mediante grammatiche libere.
  18. 18. LFC Definizione formale di grammatica Una grammatica G è una quadrupla di elementi: Formalismi generativi G = (N , T , P, S), Espressioni regolari Grammatiche libere Altri tipi di grammatica dove N è un insieme di simboli, detti non terminali; T è un insieme di simboli terminali, N ∩ T = Φ; P è l’insieme delle produzioni; S ∈ N è il simbolo iniziale (o assioma). Conviene anche definire l’insieme V = N ∪ T come il vocabolario della grammatica. La forma delle produzioni è ciò che caratterizza il “tipo” di grammatica. In una grammatica libera le produzioni hanno la seguente forma A→α dove A ∈ N e α ∈ V ∗
  19. 19. LFC Un primo esempio di grammatica libera Formalismi N {E} = generativi Espressioni regolari T {(, ), +, ∗, id} = Grammatiche libere Altri tipi di grammatica S E = P {E → E+E, = E → E∗E, E → (E), E → id } Si noti la presenza, nella definizione di una grammatica, dei cosiddetti metasimboli, simboli cioè che non sono terminali ne’ non terminali. Esempi di metasimboli sono le parentesi graffe (che hanno il solito significato di descrizione di insieme) e la freccia orientata a destra (→).
  20. 20. LFC Derivazioni Formalismi generativi Le grammatiche sono formalismi generativi perchè Espressioni regolari consentono di “generare” stringhe di caratteri tramite Grammatiche libere Altri tipi di grammatica il meccanismo delle derivazioni. Una derivazione è il processo mediante il quale, a partire dall’assioma ed applicando una sequenza di produzioni, si arriva a scrivere una stringa di T ∗ . Al riguardo le produzioni sono anche dette regole di riscrittura. Una produzione del tipo E → E+E si legge infatti nel seguente modo: Il simbolo E può essere “riscritto” come E+E.
  21. 21. LFC Derivazioni (continua) Formalismi Sia α = βAγ, dove A ∈ N e β, γ ∈ V ∗ e sia A → δ generativi Espressioni regolari una produzione di G. Grammatiche libere Altri tipi di grammatica Applicare la produzione A → δ alla stringa α consente di sostituire (“riscrivere”) il non terminale A con il lato destro δ della produzione, ottenendo la stringa βδγ. Si dice che α deriva direttamente la stringa βδγ e si scrive α ⇒G βδγ Se α1 ⇒G α2 ⇒G . . . ⇒G αk , k ≥ 1, allora si dice che α1 deriva αk e si scrive α1 ⇒∗ αk . G Qualora non possano sorgere ambiguità eviteremo di indicare la grammatica nella notazione ⇒G .
  22. 22. LFC Esempi Formalismi Chiamiamo G1 la grammatica precedentemente generativi Espressioni regolari introdotta. Allora: Grammatiche libere Altri tipi di grammatica E+E ⇒G1 id+E tramite l’applicazione della produzione E → id alla prima occorrenza di E. E+E ⇒∗ 1 id + id tramite l’applicazione della G produzione E → id ad entrambe le occorrenze di E. E ⇒∗ 1 id + (E) in quanto G E ⇒G1 E+E ⇒G1 E+(E) ⇒G1 id + (E). E ⇒∗ 1 id + (id), in quanto E ⇒G1 E+E ⇒G1 G E+(E) ⇒G1 id + (E) ⇒G1 id + (id). Una derivazione alternativa per id + (id) è E ⇒G1 E+E ⇒G1 id+E ⇒G1 id + (E) ⇒G1 id + (id).
  23. 23. LFC Frasi e linguaggio generato da una grammatica Formalismi generativi Espressioni regolari Sia G = (N , T , P, S) una grammatica. Grammatiche libere Altri tipi di grammatica Si chiama forma di frase di G una qualunque stringa α di V ∗ tale che S ⇒∗ α. G Se α ∈ T ∗ allora si dice che α è una frase di G. Il linguaggio generato da G (che indicheremo spesso con la notazione L(G)) è l’insieme delle frasi di G. Dagli esempi precedenti possiamo conlcudere che le stringhe id + (E) e id + (id) sono forme di frase di G1 ; id + (id) è anche una frase e dunque è nel linguaggio L(G). Se la grammatica è libera da contesto allora anche il linguaggio viene detto libero (da contesto).
  24. 24. LFC Esempi Formalismi generativi La grammatica G1 genera il linguaggio delle Espressioni regolari Grammatiche libere espressioni aritmetiche composte da +, *, (, ) e id. Altri tipi di grammatica Le stringhe più corte in L(G1 ) sono id, id + id, id ∗ id, (id). Il linguaggio {ab, c}∗ è libero perché generato da S → SS, S → ab, S → c, S → Il linguaggio L11 su {a, b} costituito da tutte le stringhe α palindrome (cioè tali che αR = α) è libero in quanto generabile dalla grammatica S → aSa, S → bSb, S → a, S → b, S →
  25. 25. LFC Un esempio più complesso: le e.r. come linguaggio libero Formalismi generativi Espressioni regolari La grammatica G2 così definita Grammatiche libere Altri tipi di grammatica N {E, T , F , A} = T {0, 1, (, ), +, ∗, Φ, } = S E = P {E → T , E → T +E, = T → F , T → FT , F → (E), F → (E)* , F → A, F → A* , A → 0, A → 1 } genera tutte le stringhe sull’alfabeto 0, 1, (, ), +, ∗, Φ, che sono espressioni regolari ben formate.
  26. 26. LFC Esempio La stringa (epressione regolare) 0(0+1)∗ Formalismi appartiene a L(G2 ) causa la derivazione: generativi Espressioni regolari Grammatiche libere ⇒G2 E T Altri tipi di grammatica ⇒G2 Usando T → FT FT ⇒G2 Usando T → F FF ⇒G2 Usando F → A AF A(E)∗ Usando F → (E)∗ ⇒G2 0(E)∗ ⇒G2 Usando A → 0 0(T + E)∗ ⇒G2 Usando E → T + E 0(T + T )∗ ⇒G2 Usando E → T 0(F + T )∗ ⇒G2 Usando T → F 0(F + F )∗ ⇒G2 Usando T → F 0(A + F )∗ ⇒G2 Usando F → A 0(A + A)∗ ⇒G2 Usando F → A 0(0 + A)∗ ⇒G2 Usando A → 0 0(0 + 1)∗ ⇒G2 Usando A → 1
  27. 27. LFC Linguaggio generato da una grammatica (continua) Formalismi generativi Espressioni regolari Grammatiche libere Per dimostrare formalmente che una data Altri tipi di grammatica grammatica G genera un dato linguaggio L (cioè per provare che L = L(G)) si procede solitamente per induzione. Dapprima si formula una congettura sulla forma delle frasi di L(G), di solito provando alcune semplici derivazioni. Dopodiché si dimostra separatamente (per induzione) che: se X è generata dal linguaggio, allora X ha quella particolare forma; se X è una stringa con quella particolare forma, allora è generabile dal linguaggio.
  28. 28. LFC Esempio Si consideri laseguente grammatica: Formalismi generativi Espressioni regolari Grammatiche libere N {A, B} = Altri tipi di grammatica T {a, b} = S A = P {A → aA, = A → B, B → bB, B→ } Vogliamo dimostrare che L(G) = L5 = {an bm |n, m ≥ 0}. Dimostriamo che, se X ∈ L(G), allora X = an bm , per opportuni valori di n ed m. La dimostrazione procede per induzione sulla lunghezza k delle derivazioni.
  29. 29. LFC Esempio (continua) Preliminarmente, osserviamo che una derivazione Formalismi lunga k (k ≥ 1) genera, a partire da B, la stringa generativi bk −1 (anche questa è una semplice induzione). Espressioni regolari Grammatiche libere Altri tipi di grammatica Per tornare a L(G), la base dell’induzione è costituita dall’unica derivazione lunga 2 (la più corta): A ⇒ B ⇒ , che genera una stringa della forma voluta (con n = m = 0). Dimostriamo ora che la tesi è vera per derivazioni lunghe k > 2. Per una tale derivazione possiamo scrivere A ⇒ aA ⇒∗ X , oppure A ⇒ B ⇒∗ X , L’applicazione ad X dell’ipotesi induttiva (nel primo caso) o del risultato preliminare (secondo caso) porta agevolmente alla tesi.
  30. 30. LFC Esempio (continua) Formalismi generativi Espressioni regolari Dimostrare che ogni stringa della forma an bm Grammatiche libere Altri tipi di grammatica appartiene al linguaggio è ancora più semplice. an bm è infatti generabile dalla seguente derivazione di lunghezza n + m + 2 A ⇒∗ an A ⇒ an B ⇒∗ an bm B ⇒ an bm costituita da n applicazioni della regola A → aA; una applicazione di A → B; m applicazioni di B → bB; una applicazione di B → .
  31. 31. LFC Equivalenza Formalismi Due grammatiche G e G si dicono equivalenti se generativi Espressioni regolari generano lo stesso linguaggio. Grammatiche libere Altri tipi di grammatica In alcuni testi, la sola coincidenza dei linguaggi generati viene detta equivalenza debole. In seguito vedremo diverse trasformazioni delle grammatiche che conservano il linguaggio. Un primo semplice esempio è costituito dalla grammatica G1 e dalla seguente grammatica: → E+T | T E → T ∗F | F T → id | (E) F che risultano essere (debolmente) equivalenti.
  32. 32. LFC Convenzioni notazionali I simboli non terminali, detti anche variabili Formalismi sintattiche, verranno spesso espressi (come nel caso generativi Espressioni regolari della grammatica appena introdotta) usando lettere Grammatiche libere Altri tipi di grammatica maiuscole in corsivo. La scrittura E → E+E | E∗E | (E) | id verrà utilizzata come abbreviazione per → E+E, E → E∗E, E → (E), E → id E Il metasimbolo | (barra verticale) indica dunque alternativa.
  33. 33. LFC Descrizione succinta di una grammatica Formalismi generativi Se si conviene di elencare per prime le produzioni Espressioni regolari relative al simbolo iniziale, una grammatica può Grammatiche libere Altri tipi di grammatica essere espressa semplicemente tramite le produzioni (in realtà abbiamo già usato questa convenzione). Ad esempio, la grammatica G2 che descrive le espressioni regolari su {a, b} può essere semplicemente descritta come → T | T +E E → F | FT T → (E) | (E)∗ | A | A∗ F A → 0|1
  34. 34. LFC Backus-Naur Form (BNF) Nella descrizione della sintassi dei linguaggi di Formalismi generativi programmazione le variabili sintattiche vengono Espressioni regolari Grammatiche libere rappresentate mediante un identificatore descrittivo Altri tipi di grammatica racchiuso fra parentesi angolate. Esempio → if espressione booleana then comando if lista di comandi endif | if espressione booleana then lista di comandi else lista di comandi endif
  35. 35. LFC Altri esempi Formalismi generativi Nella BNF, la grammatica G1 viene descritta dalle Espressioni regolari Grammatiche libere seguenti produzioni Altri tipi di grammatica → espressione + espressione | espressione → espressione ∗ espressione | espressione → ( espressione ) | id espressione Una grammatica per le chiamate di procedura in Java → id( parametri-opzionali ) chiamata → lista-di-parametri | parametri-opzionali → lista-di-parametri , parametro | lista-di-parametri parametro
  36. 36. LFC Altre convenzioni Elementi opzionali possono essere inclusi fra i meta Formalismi generativi simboli [ e ]. Espressioni regolari Grammatiche libere Ad esempio, potremo usare la scrittura Altri tipi di grammatica → if espressione booleana then comando if lista di comandi [ else lista di comandi ] endif Elementi ripetitivi possono essere inclusi fra i metasimboli { e }. Ad esempio → comando { ; comando } list di comandi
  37. 37. LFC Altre convenzioni (continua) Formalismi Più recentemente, nella BNF i simboli terminali (detti generativi anche token name) vengono scritti in grassetto. Espressioni regolari Grammatiche libere Altri tipi di grammatica In questo modo diventa possibile sopprimere l’uso delle parentesi angolate intorno alle variabili sintattiche, migliorando la leggibilità complessiva. Le variabili sintattiche continuano ad essere scritte in corsivo. Ad esempio, potremo scrivere → if espressione booleana then comando if lista di comandi [ else lista di comandi ] endif
  38. 38. LFC Altre convenzioni (continua) Formalismi generativi Espressioni regolari Grammatiche libere Altri tipi di grammatica Nel caso in cui possano sorgere ambiguità, i simboli terminali vengono racchiusi fra doppi apici. Un esempio è costituita dal caso di simboli terminali coincidenti con qualche metasimbolo. Esempio (tratto dalla sintassi del C): comando composto → { { dichiarazione } { comando } }
  39. 39. LFC Esercizi proposti Formalismi Fornire una grammatica libera per l’insieme delle generativi Espressioni regolari stringhe costituite da parentesi correttamente Grammatiche libere Altri tipi di grammatica bilanciate (ad esempio, ()(()) e (()) devono far parte del linguaggio, mentre ())( non deve farne parte). Fornire una grammatica libera per il linguaggio L12 = {an b2n |n > 0} sull’alfabeto {a, b}. Si consideri la seguente grammatica GI S → I | A, I → if B then S | if B then S else S, A → a, B → b e si fornisca una derivazione per la stringa if b then if b then a else a
  40. 40. LFC Alberi di derivazione (parse tree) Un parse tree illustra graficamente il processo di Formalismi generativi derivazione di una stringa a partire dal simbolo Espressioni regolari Grammatiche libere iniziale (o, più genericamente, da un non terminale). Altri tipi di grammatica Formalmente, un parse tree per una grammatica libera G = N , T , P, S è un albero radicato ed etichettato che soddisfa le seguenti proprietà: i nodi interni sono etichettati con simboli di N e, in particolare, la radice è etichettata con l’assioma; le foglie sono etichettate con simboli di T o con il simbolo ; se A ∈ N etichetta un nodo interno e X1 , . . . , Xk sono le etichette dei figli di (il nodo con etichetta) A, con Xi ∈ V, allora deve esistere in P la produzione A → X1 X2 . . . Xk ; Se A ∈ N etichetta un nodo interno il cui unico figlio è un nodo con etichetta , allora deve esistere in P la produzione A → .
  41. 41. LFC Esempi Formalismi generativi Parse tree per la stringa id ∗ (id + id) nella Espressioni regolari Grammatiche libere grammatica G1 Altri tipi di grammatica E E E * ( id E ) + id id
  42. 42. LFC Esempi Formalismi Parse tree per la stringa generativi Espressioni regolari if b then if b then a else a Grammatiche libere Altri tipi di grammatica nella grammatica GI S I if then else B S S b I a if then B S b a
  43. 43. LFC Alberi di derivazione (parse tree) Un parse tree impone una struttura sintattica alle Formalismi generativi frasi e questo è generalmente il primo passo per Espressioni regolari attribuire ad esse un significato. Grammatiche libere Altri tipi di grammatica La struttura sintattica può essere vista in maniera ricorsiva come composizione della struttura di (sotto)frasi corrispondenti a sottoalberi del parse tree. In particolare, il sottoalbero radicato in un nodo con etichetta A ∈ N fornisce la struttura della frase derivata a partire da A. Nel caso del parse tree relativo alla frase id ∗ (id + id), il sottoalbero radicato nel nodo indicato dalla freccia fornisce la struttura sintattica dell’espressione fra parentesi e l’albero nella sua interezza mostra la struttura della frase come composizione di espressioni.
  44. 44. LFC Parse tree e derivazioni Formalismi generativi Un risultato fondamentale afferma che α è una frase Espressioni regolari Grammatiche libere di una grammatica G (cioè può essere derivata in G Altri tipi di grammatica a partire dal simbolo iniziale) se e solo se esiste in G un parse tree per α. In generale, una frase di una grammatica può essere ottenuta mediante più di una derivazione (si rammenti l’esempio di id + (id) nella grammatica G1 ). In particolare, ad un dato parse tree per α possono corrispondere più derivazioni. Per definire con precisione il comportamento di un parser (come vedremo) è conveniente eliminare questa “ridondanza” limitandoci a considerare solo particolari derivazioni.
  45. 45. LFC Derivazioni canoniche Formalismi Si dice che S ⇒∗ α è una derivazione canonica generativi G Espressioni regolari sinistra della frase α in G, se in essa ad ogni passo Grammatiche libere Altri tipi di grammatica viene riscritto il simbolo non terminale più a sinistra. Analoga definizione vale per la derivazione canonica destra. Delle due derivazioni viste per id + (id) in G1 , la seconda è una derivazione canonica sinistra, mentre la prima non è una derivazione canonica. Se α ∈ V ∗ (cioè se α è una forma di frase) e S ⇒∗ α G mediante una derivazione canonica sinistra (destra), si dice che α è una forma di frase sinistra (destra); il termine inglese utilizzato è left/right sentential form. Considerare derivazioni canoniche può non essere sufficiente ad eliminare ambiguità.
  46. 46. LFC Esempio La frase id + id + id di G1 può essere ottenuta Formalismi mediante due differenti derivazioni canoniche destre, generativi Espressioni regolari e precisamente Grammatiche libere Altri tipi di grammatica ⇒G1 E E+E ⇒G1 E+E+E ⇒G1 E+E+id ⇒G1 E+id+id ⇒G1 id + id + id e ⇒G1 E E+E ⇒G1 E+id ⇒G1 E+E+id ⇒G1 E+id+id ⇒G1 id + id + id (dove i simboli non terminali sottolineati sono quelli che verranno espansi al passo successivo).
  47. 47. LFC Ambiguità Abbiamo visto che ad una frase può corrispondere Formalismi generativi più di una derivazione cononica. Espressioni regolari Grammatiche libere Altri tipi di grammatica Tuttavia, per un dato un parse tree esiste una sola derivazione canonica sinistra e una sola derivazione canonica destra. (NB. D’ora in avanti, ci riferiremo alle derivazioni canoniche destre semplicemente come alle derivazioni canoniche.) Diciamo quindi che una grammatica è ambigua se esistono frasi per le quali esistono differenti parse tree (equivalentemente, differenti derivazioni canoniche sinistre o destre). L’ambiguità è un ostacolo alla realizzazione di un parser e di norma o viene eliminata alla radice (utilizzando grammatiche non ambigue) oppure utilizzando opportune regole per la disambiguazione.
  48. 48. LFC Esempio Formalismi La grammatica GI è ambigua in quanto alla frase generativi Espressioni regolari if b then if b then a else a Grammatiche libere Altri tipi di grammatica corrisponde un altro parse tree, e precisamente S I if then B S b I if then else B S S b a a
  49. 49. LFC Aspetti problematici per il parsing Ci sono alcune caratteristiche delle grammatiche libere Formalismi che possono ostacolare il processo di parsing, o anche generativi solo un “certo tipo” di parsing (come vedremo). Ne Espressioni regolari Grammatiche libere elenchiamo brevemente alcune: Altri tipi di grammatica ambiguità; presenza di simboli non terminali che generano linguaggi vuoti; simboli non terminali che non compaiono in nessuna forma di frase; presenza di cicli (derivazioni del tipo A ⇒+ A) o comunque di left recursion (derivazioni del tipo A ⇒+ Aα, con α = ); presenza di produzioni A → , dove A = S; presenza di prefissi comuni a due o più produzioni relative allo stesso non terminale, ad esempio A → αβ1 e A → αβ2 .
  50. 50. LFC Esempi La grammatica Formalismi generativi Espressioni regolari Grammatiche libere S → Sa | b Altri tipi di grammatica presenta una ricorsione immediata a sinistra in quanto S → Sa. La grammatica S → A|b A → Aa | Sa presenta una ricorsione a sinistra in quanto S ⇒+ Sa. La grammatica GI (oltre ad essere ambigua) presenta un prefisso comune alla due produzioni che riscrivono il simbolo I.
  51. 51. LFC Esempi Nella grammatica Formalismi generativi S → SA Espressioni regolari Grammatiche libere A → a| Altri tipi di grammatica c’è una produzione A → e questa provoca il ciclo S ⇒+ S. Nella grammatica S → aS A→a il non terminale A è irraggiungibile da S. Nella grammatica S → aS | a | A A → Aa il non terminale A genera il linguaggio vuoto.
  52. 52. LFC Scrittura di una grammatica per il parsing Terminiamo questa parte del corso sulle CFG Formalismi presentando una serie di algoritmi per la “rimozione” generativi Espressioni regolari degli aspetti problematici cui abbiamo fatto cenno. Grammatiche libere Altri tipi di grammatica Ci serve qualche definizione. Raggiungibilità Un non terminale è raggiungibile se può comparire in una forma di frase. Buona definizione Un non terminale è ben definito se non genera il linguaggio vuoto. Pulizia Si dice che una grammatica è pulita se non contiene cicli e ogni non terminale è raggiungibile e ben definito. Annullabilità Un non terminale A è annullabile se A ⇒+ . Prefissi comuni Presenza di coppie di produzioni del tipo A → αβ1 e A → αβ2 . Ricorsione sinistra Presenza di derivazioni del tipo A ⇒+ Aα.
  53. 53. LFC Rimozione dei non terminali non ben definiti Formalismi Per eliminare i simboli non terminali che generano un generativi Espressioni regolari linguaggio vuoto si calcola dapprima l’insieme Grammatiche libere Altri tipi di grammatica complemento, costituito dai non terminali ben definiti, mediante un algoritmo di chiusura. Chiameremo D tale insieme. La base dell’algoritmo pone in D tutti quei terminali A per i quali esiste una produzione A → α, con α ∈ T ∗ . Il passo ricorsivo consiste nell’aggiungere a D quei simboli non terminali A per i quali esiste una produzione A → α in cui α contiene simboli terminali o simboli già in D. Quando il passo ricorsivo non aggiunge nulla a D, l’algoritmo termina e l’insieme dei non terminali non ben definiti è N D.
  54. 54. LFC Esempio Si consideri la grammatica G così definita: Formalismi generativi Espressioni regolari S → aA b | bDEa Grammatiche libere Altri tipi di grammatica A→ | aA | D B → b | bC C → cE D → dA → eC E → fD F L’insieme D viene calcolato inserendo dapprima i simboli A e B (passo base), quindi S e D, infine F . Ne consegue che C ed E sono non ben definiti. Come “effetto collaterale” è possibile eliminare quelle produzioni inutili che, come S → bDEa, contengono a destra simboli non ben definiti.
  55. 55. LFC Esempio (continua) Formalismi generativi Espressioni regolari Grammatiche libere Altri tipi di grammatica Dopo l’eliminazione dei non terminali non ben definiti e delle produzioni inutili si ottiene la grammatica G , equivalente a G: S → aA b A→ | aA | D B→b D → dA → fD F
  56. 56. LFC Rimozione dei non terminali non raggiungibili Formalismi Il problema dell’eliminazione dei simboli non generativi Espressioni regolari raggiungibili può essere visto come una semplice Grammatiche libere Altri tipi di grammatica istanza del problema della raggiungibilità in un grafo orientato. Data una CFG G si costruisce un grafo orientato G = (V , E) nel seguente modo: l’insieme V dei vertici contiene un elemento corrispondente ad ogni non terminale di G; l’insieme E contiene una coppia (arco orientato) A, B se e solo se esiste una produzione A → αBβ, α, β ∈ V ∗ . L’esecuzione dell’algoritmo BFS consente di stabilire i nodi raggiungibili dal nodo (corrispondente ad) S. Si può quindi procedere all’eliminazione dei non terminali corrispondenti ai vertici non raggiunti.
  57. 57. LFC Esempio (continua) Eseguendo la BFS sul grafo corrispondente a G Formalismi generativi Espressioni regolari A D Grammatiche libere Altri tipi di grammatica S F B si scopre che B ed F non sono raggiungibili da S. La loro eliminazione porta alla grammatica equivalente G : S → aA b A→ | aA | D D → dA È ora facile vedere che il linguaggio generato da G è a(a|d)∗ b.
  58. 58. LFC Eliminazione dei non terminali annullabili Formalismi generativi Espressioni regolari Grammatiche libere L’algoritmo calcola l’insieme E dei simboli non Altri tipi di grammatica terminali a partire dai quali è possibile derivare . E ← {A ∈ N |A → ∈ P} 1: while ∃A → A1 . . . Ak t.c. Ai ∈ E & A ∈ E do 2: E ← E ∪ {A} 3: end while 4: Elimina da P le produzioni del tipo A → 5: Elimina i non terminali di E dalle restanti 6: produzioni in tutti i modi (combinatorialmente) possibili
  59. 59. LFC Esempio Formalismi generativi Si consideri la grammatica: Espressioni regolari Grammatiche libere Altri tipi di grammatica S → A| A → aAC | SB B → bB | b | C→c Inizialmente si pone E = {S, B}, poiché S e B sono immediatamente annullabili. Poiché esiste la produzione A → SB, al secondo passo il non terminale A viene inserito in E. Nessun altro non terminale può essere aggiunto a E. Risulta quindi E = {S, A, B}.
  60. 60. LFC Esempio (continua) Dopo l’eliminazione delle produzioni del tipo: A → Formalismi generativi S→A Espressioni regolari Grammatiche libere A → aAC | SB Altri tipi di grammatica B → bB | b C→c dopo la cancellazione dei non terminali in E in tutti i modi combinatorialmente possibili: S→A A → aAC | aC | SB | S | B B → b | bB C→c La grammatica modificata è equivalente alla grammatica di partenza, salvo che non può generare la stringa vuota.
  61. 61. LFC Esempio (continua) Formalismi generativi Espressioni regolari Grammatiche libere Per rendere del tutto equivalenti le grammatiche Altri tipi di grammatica possiamo aggiungere un nuovo assioma S con le produzioni S → S | . La grammatica “completa” diviene quindi: → S| S S→A A → aAC | aC | SB | S | B B → b | bB C→c
  62. 62. LFC Eliminazione dei cicli I cicli, cioè derivazioni del tipo A ⇒+ A, sono non Formalismi solo inutili ma anche dannosi, in quanto danno generativi origine ad ambiguità. Espressioni regolari Grammatiche libere Un algoritmo per eliminare i cicli elimina più in Altri tipi di grammatica generale le produzioni che danno origine a derivazioni del tipo A ⇒+ B. Si suppone che non ci siano non terminali annullabili. In una tale grammatica, la possibilità che risulti A ⇒+ B può essere solo conseguenza di una catena di cosiddette produzioni singole: A → A1 → A2 ... → Ak →B che sono facili da individuare.
  63. 63. LFC Eliminazione dei cicli (continua) Formalismi generativi Espressioni regolari Grammatiche libere Si consideri ora una generica coppia A, B tale che Altri tipi di grammatica A ⇒+ B; se B → α1 | . . . | αr sono le produzioni (non singole) di B, allora si aggiungono alla grammatica le produzioni A → α1 | . . . | αr Al termine, si eliminano tutte le produzioni singole.
  64. 64. LFC Esempio Si consideri ancora la grammatica: Formalismi generativi Espressioni regolari → S| S Grammatiche libere Altri tipi di grammatica S→A A → aAC | aC | SB | S | B B → b | bB C→c È facile vedere che risulta: S ⇒+ S, S ⇒+ A, S ⇒+ B, S ⇒+ A, S ⇒+ B, S ⇒+ S, A ⇒+ B. Le produzioni che vanno aggiunte sono quindi → aAC | aC | SB | b | bB S S → aAC | aC | SB | b | bB A → b | bB
  65. 65. LFC Esempio (continua) La grammatica risultante (priva di cicli) è: Formalismi generativi Espressioni regolari → aAC | aC | SB | b | bB | S Grammatiche libere Altri tipi di grammatica S → aAC | aC | SB | b | bB A → aAC | aC | SB | b | bB B → b | bB C→c Una grammatica equivalente ma più semplice (e sempre senza cicli) è: → S| S S → aSC | aC | SB | b | bB B → b | bB C→c
  66. 66. LFC Eliminazione delle ricorsioni sinistre Formalismi generativi Espressioni regolari Grammatiche libere Si può assumere che la grammatica in input non Altri tipi di grammatica contenga non terminali annullabili ne’ cicli. Sia A1 , . . . , An un ordinamento (arbitrario) dei simboli non terminali. L’idea dell’algoritmo è di far sì che ogni produzione del tipo Ai → Aj α abbia sempre i < j. L’algoritmo consta di due cicli annidati: 1. Nel ciclo esterno (con iteratore i) vengono eliminate le ricorsioni immediate Ai → Ai α; 2. Nel ciclo interno (con iteratore j) vengono modificate quelle produzioni del tipo Ai → Aj α in cui j < i.
  67. 67. LFC Eliminazione delle ricorsioni sinistre (continua) Formalismi generativi Espressioni regolari Grammatiche libere Per eliminare tutte le produzioni del tipo A → Aαr , Altri tipi di grammatica r = 1, 2, . . . , t (per qualche t ≥ 1), si considerano le altre produzioni relative al non terminale A A → β1 | β2 | . . . | βm in cui nessuna stringa βs inizia per A. Le produzioni per A vengono quindi sostituite nel modo seguente A → β1 A | β2 A | . . . | βm A → α1 A | α2 A | . . . | αt A | A
  68. 68. LFC Eliminazione delle ricorsioni sinistre (continua) Formalismi generativi Espressioni regolari Grammatiche libere Altri tipi di grammatica Per eliminare una produzione del tipo Ai → Aj α si considerano le altre produzioni relative al non terminale Aj Aj → β1 | β2 | . . . | βp in cui nessuna stringa inizia per Aq , q ≤ j. La produzione Ai → Aj α viene quindi sostituita nel modo seguente → β1 α | β2 α | . . . | βm α Ai
  69. 69. LFC Eliminazione delle ricorsioni sinistre (continua) Formalismi generativi Espressioni regolari Grammatiche libere Altri tipi di grammatica L’algoritmo completo è il seguente 1: Disponi i non terminali in ordine A1 , . . . , An 2: for i = 1 to n do for j = 1 to i − 1 do 3: Sostituisci le produzioni del tipo Ai → Aj α 4: end for 5: Sostituisci le produzioni del tipo Ai → Ai α 6: 7: end for
  70. 70. LFC Esempio Formalismi generativi Espressioni regolari Consideriamo ancora la grammatica G1 per le Grammatiche libere Altri tipi di grammatica espressioni → E + E | E ∗ E | (E) | id E che contiene solo ricorsioni immediate (anche perché contiene un solo non terminale). Le produzioni vengono sostituite nel modo seguente, con l’introduzione di un non terminale E → (E) E | id E E → +E E | ∗ E E | E
  71. 71. LFC Esempio Consideriamo la grammatica così definita: Formalismi generativi A → Bb | a Espressioni regolari Grammatiche libere B → Bb | Ac Altri tipi di grammatica che consente la derivazione A ⇒+ Acb. Se nell’ordinamento dei non terminali A si fa precedere a B diviene necessario eliminare la produzione B → Ac. Questo comporta l’introduzione delle due produzioni B → Bbc | ac. La successiva eliminazione delle ricorsioni immediate (B → Bb | Bbc) porta alla seguente grammatica modificata A → Bb | a B → acB → bB | bcB | B
  72. 72. LFC Eliminazione delle ambiguità Formalismi generativi Da un punto di vista algoritmico il problema è Espressioni regolari Grammatiche libere notevolmente più complicato. Altri tipi di grammatica Addirittura, se non si fanno restrizioni di altro tipo sulla grammatica libera G in input, il problema di stabilire se G è ambigua non ammette algoritmo (problema indecidibile). Gli algoritmi esistono per sottoclassi delle grammatiche libere. Nella pratica la soluzione consiste nel “progettare” la grammatica in modo che essa sia non ambigua (piuttosto che verificarlo a posteriori) evitando una serie di errori che possono generare ambiguità. Esamineremo alcuni degli accorgimenti da utilizzare
  73. 73. LFC Ambiguità delle frasi condizionali Formalismi generativi Nel contesto dei linguaggi di programmazione è Espressioni regolari consuetudine interpretare la frase ambigua della Grammatiche libere Altri tipi di grammatica grammatca GI if cond then if cond then stmt else stmt nel seguente modo: if cond then begin if cond then stmt else stmt end associando cioè ogni else con il più vicino then non ancora associato. Questa regola di solito viene implementata dai parser ma non viene forzata dalle produzioni.
  74. 74. LFC Ambiguità delle frasi condizionali (continua) Volendo modificare la grammatica, si introducono Formalismi due tipologie di istruzione condizionale, che generativi Espressioni regolari chiameremo chiusa e aperta Grammatiche libere Altri tipi di grammatica S → O|C C → if B then C else C | A O → if B then S | if B then C else O dove A indica un generico altro comando. Se ora riconsideriamo la frase if b then if b then a else a dove b ed a indicano, rispettivamente, condizioni logiche e comandi generici (non condizionali) vediamo che all’interpretazione if b then begin if b then a end else a non corrisponde nessuna derivazione.
  75. 75. LFC Esempio Consideriamo il seguente frammento di grammatica, Formalismi generativi nella quale, rispetto al caso precedente, abbiamo Espressioni regolari Grammatiche libere inserito anche un’istruzione iterativa Altri tipi di grammatica S → O|C C → if B then C else C | I | A O → if B then S | if B then C else O I → while B do S Con questa grammatica la stringa if b then while b do if b then a else a è ambigua, come dimostrano i due possibili alberi di derivazioni mostrati nelle successive trasparenze (la soluzione è lasciata come esercizio)
  76. 76. LFC Esempio (continua) S Formalismi generativi Espressioni regolari C Grammatiche libere Altri tipi di grammatica if then else B C C b I A while do B S a b O if then B S b C A a
  77. 77. LFC Esempio (continua) S Formalismi generativi Espressioni regolari O Grammatiche libere Altri tipi di grammatica if then B S b C I while do B S b C if then else B C C b A A a a
  78. 78. LFC Ambiguità legata alla ricorsione Se una grammatica ammette (per almeno un simbolo Formalismi non terminale raggiungibile) risorsioni bilaterali, cioè generativi sia ricorsioni a sinistra che a destra, allora la Espressioni regolari Grammatiche libere grammatica è ambigua. Altri tipi di grammatica In generale, supponiamo che una data grammatica consente una derivazione del tipo A ⇒+ AαA, con α ∈ V ∗. Sono quindi possibili le seguenti due derivazioni della stringa α1 α2 α3 α4 α5 , dove αi ∈ T è derivabile da A, i = 1, . . . , 5. A A A A A A α4 α2 A A A A α2 α5 α1 α4 α1 α3 α3 α5
  79. 79. LFC Ambiguità legate all’unione di linguaggi Formalismi generativi Se G e G generano i linguaggi L e L , allora un Espressioni regolari Grammatiche libere modo immediato per generare il linguaggio Altri tipi di grammatica L = L ∪ L è di usare una grammatica siffatta S → S |S → . . . Produzioni di G S → . . . Produzioni di G S assumendo che S ed S siano gli assiomi rispettivamente di G e G e che le due grammatiche non abbiano simboli non terminali comuni. Tuttavia se L ∩ L = Φ allora la grammatica risulta ambigua.
  80. 80. LFC Esempio Sia G la grammatica (già vista) che genera il Formalismi linguaggio L11 , delle palindrome sull’alfabeto {a, b}: generativi Espressioni regolari P → aPa | bPb | a | b | Grammatiche libere Altri tipi di grammatica Sia G la grammatica (anch’essa già vista) che genera il linguaggio L5 , delle stringhe an bm : A → aA | B, B → bB | Poiché l’intersezione dei due linguaggi non è vuota (contiene stringhe del tipo an e bm ), la grammatica S → P|A P → aPa | bPb | a | b | A → aA | B, B → bB | è ambigua. Ad esempio, la frase aa ammette le due seguenti derivazioni canoniche: S ⇒ aPa ⇒ aa e S ⇒ A ⇒ aA ⇒ aaA ⇒ aaB ⇒ aa.
  81. 81. LFC Ambiguità legate al concatenamento di linguaggi Formalismi generativi Espressioni regolari Se G e G generano i linguaggi L e L , allora un Grammatiche libere Altri tipi di grammatica modo immediato per generare il linguaggio L = L L è di usare una grammatica siffatta S → SS → . . . Produzioni di G S → . . . Produzioni di G S assumendo che S ed S siano gli assiomi rispettivamente di G e G e che le due grammatiche non abbiano simboli non terminali comuni. Se G può generare le stringhe α1 α2 e α1 e G può generare le stringhe α2 α3 e α3 , allora la stringa α1 α2 α3 ammette due derivazioni canoniche.
  82. 82. LFC Esempio Il linguaggio L8 (delle stringhe del tipo an bm ck ) può Formalismi generativi essere ottenuto come concatenazione dei linguaggi Espressioni regolari {an bm } e {bn cm }, e dunque dalla grammatica: Grammatiche libere Altri tipi di grammatica S → AC A → aA | B, B → bB | C → bC | D, D → cD | che però risulta ambigua, a causa della capacità di entrambe le grammatiche “componenti” di generare le stringhe bn . Ad esempio, per la stringa abc si possono dare le seguenti due derivazioni canoniche: S ⇒ AC ⇒ AD ⇒ AcD ⇒ Ac ⇒ aAc ⇒ aBc ⇒ abBc ⇒ abc e S ⇒ AC ⇒ AbC ⇒ AbD ⇒ AbcD ⇒ Abc ⇒ aAbc ⇒ aBbc ⇒ abc.
  83. 83. LFC Precedenza degli operatori Formalismi La grammatica G1 fornisce un esempio di ambiguità generativi Espressioni regolari legata alla presenza di produzioni bilaterali Grammatiche libere Altri tipi di grammatica → E+E | E∗E E In questo caso è facile eliminare la ricorsione bilaterale immediata, introducendo un nuovo simbolo non terminale E → E+E | E∗E | E E → id | (E) E La nuova grammatica non è più ambigua ma, come G1 , presenta un problema legato alla precedenza degli operatori.
  84. 84. LFC Precedenza degli operatori (continua) Si osservi l’albero di derivazione della stringa Formalismi id + id ∗ id generativi Espressioni regolari E Grammatiche libere Altri tipi di grammatica E * E’ id E + E’ id E’ id Esso suggerisce che l’interpretazione debba essere (id + id) ∗ id, che non coincide con l’interpretazione che universalmente si dà alla stringa in Matematica.
  85. 85. LFC Precedenza degli operatori (continua) Formalismi generativi La “usuali” precedenze di operatore possono essere Espressioni regolari Grammatiche libere forzate introducendo differenti simboli non terminali Altri tipi di grammatica per i diversi livelli di precedenza. Ad esempio, nel caso di somma e prodotto possiamo introdurre due livelli di precedenza, rappresentati dai non terminali E e T , oltre ad un simbolo (useremo F ) per la catogoria delle espressioni di base (nel nostro caso identificatori ed espressioni tra parentesi): → E+T | T E → T ∗F | F T → id | (E) F
  86. 86. LFC Precedenza degli operatori (continua) Formalismi generativi Espressioni regolari Grammatiche libere Altri tipi di grammatica La grammatica precedente (con le ovvie estensioni) “gestisce” senza ambiguità anche il caso degli operatori di divisione e sottrazione, inseriti nelle giuste categorie sintattiche: → E+T | E−T | T E → T ∗F | T /F | F T → id | (E) F
  87. 87. LFC Precedenza degli operatori (continua) Formalismi generativi Espressioni regolari Grammatiche libere Volendo inserire anche l’operatore di Altri tipi di grammatica esponenziazione (che ha precedenza maggiore), è necessario prevedere un’ulteriore variabile sintattica e ricordarsi che l’operatore di esponenziazione (qui useremo il simboloˆ) è associativo a destra: → E+T | E−T | T E → T ∗P | T /P | P T P → FˆP | F → id | (E) F
  88. 88. LFC Esercizi Formalismi generativi Espressioni regolari Grammatiche libere Si consideri il linguaggio La>b delle stringhe su Altri tipi di grammatica {a, b} che contengono più a che b. Si dica, giustificando la risposta, se la seguente grammatica libera genera La>b S → a | aS | Sa | abS | aSb | Sab | baS | bSa | Sba Si formisca una grammatica libera per il linguaggio su B contenente tutte e sole le stringhe con un diverso numero di 0 e 1.
  89. 89. LFC Esercizi Quali sono le produzioni inutili nella seguente Formalismi grammatica? (R. Backhouse) generativi Espressioni regolari A → aDbb | CH Grammatiche libere Altri tipi di grammatica B → BaH | B C→D D → C| → cEd | b E → BF F H → CD | a Si dica se la grammatica S → aA A → AB | B B→b è ambigua.
  90. 90. LFC Esercizi Si considerino le seguenti grammatiche per i Formalismi linguaggi L8 ed L9 : generativi Espressioni regolari Grammatiche libere Altri tipi di grammatica → DC S D → aDb | C → cC | e → AE S → bEc | E A → aA | Si dica quale linguaggio genera la grammatica ottenuta “unendo” le due grammatiche per L8 ed L9 , con la produzione iniziale S → S | S , e se la grammatica stessa è ambigua.
  91. 91. LFC Linguaggi formali e compilazione Formalismi generativi Espressioni regolari Grammatiche libere Altri tipi di grammatica Formalismi generativi Espressioni e linguaggi regolari Grammatiche libere Altri tipi di grammatiche
  92. 92. LFC Grammatiche lineari Se le produzioni di una grammatica G sono tutte del Formalismi tipo A → XB o A → X , dove X ∈ T ∗ e B ∈ N , allora generativi Espressioni regolari la grammatica è detta lineare destra. Grammatiche libere Altri tipi di grammatica Allo stesso modo, se le produzioni sono del tipo A → BX o A → X , G è detta lineare sinistra. Grammatiche lineari (destre o sinistre) sono dette regolari. Si può dimostrare che le espressioni regolari e le grammatiche regolari sono formalismi equivalenti; in altri termini, un linguaggio è regolare se e solo se è generabile da una grammatica regolare. Inoltre, poichè le grammatiche regolari sono anche libere, ogni linguaggio regolare è anche libero. Il viceversa non è vero; infatti il linguaggio L6 = {an bn |n ≥ 0} non è regolare ma generabile dalla grammatica libera S → aSb | .
  93. 93. LFC Esempi Formalismi generativi 1)∗ Il linguaggio 0(0 + è regolare in quanto Espressioni regolari Grammatiche libere generabile dalla seguente grammatica lineare destra Altri tipi di grammatica A → 0B | 0, B → 0 | 1 | 0B | 1B Il linguaggio L5 è regolare in quanto generabile dalla seguente grammatica lineare destra (come abbiamo già visto): S → aS | B, B → bB | Il linguaggio {ab, c}∗ è generabile dalla seguente grammatica S → abS | cS |
  94. 94. LFC Grammatiche dipendenti dal contesto Se la forma generale delle produzioni è del tipo: Formalismi generativi α→β Espressioni regolari Grammatiche libere Altri tipi di grammatica dove α, β ∈ V ∗ e |α| ≤ |β|, allora la grammatica è detta dipendente dal contesto (in inglese, context-dependent o context-sensitive o, ancora più brevemente, CSG). Alternativamente, le produzioni possono essere del tipo αAγ → αβγ dove α, β, γ ∈ V ∗ , β = e A ∈ N . Si può dimostrare che le due forme sono equivalenti (cioè generano gli stessi linguaggi). Tuttavia, la seconda forma “spiega” meglio il nome di queste grammatiche: il simbolo A può essere riscritto come β solo se appare nel contesto α − γ.
  95. 95. LFC Linguaggi dipendenti dal contesto Sono così detti i linguaggi generabili da grammatiche Formalismi generativi dipendenti dal contesto. Espressioni regolari Grammatiche libere Poiché la forma generale delle produzioni di una Altri tipi di grammatica CSG sono più generali di quelle di una CFG, l’insieme dei linguaggi dipendenti dal contesto “contiene” l’insieme dei linguaggi liberi. (Si noti che la stringa vuota può essere sempre aggiunta prevedendo la produzione S → , dove l’assioma S non compare nella parte destra di alcuna produzione.) Viceversa, ci sono linguaggi dipendenti dal contesto che non sono liberi. Un esempio è il linguaggio L13 = {an bn cn |n ≥ 0}
  96. 96. LFC Classificazione di Chomsky Formalismi generativi Espressioni regolari Grammatiche libere Le grammatiche (e i corrispondenti linguaggi) sono Altri tipi di grammatica stati raggruppati in 4 classi, in dipendenza della “potenza” delle produzioni. Al livello più basso abbiamo le grammatiche regolari (o di tipo 3), quindi le grammatiche libere (tipo 2) e quelle dipendenti dal contesto (tipo 1). Le grammatiche più generali, di tipo 0, sono dette grammatiche a struttura di frase, in cui le produzioni sono come quelle delle grammatiche di tipo 1 senza la restrizione |α| ≤ |β|.
  97. 97. LFC Costrutti non liberi nei linguaggi di programmazione Formalismi generativi Espressioni regolari Grammatiche libere Altri tipi di grammatica Alcuni aspetti della sintassi dei linguaggi di programmazione non sono catturabili da produzioni di grammatiche libere. Ad esempio, il fatto che il numero di argomenti in una chiamata di procedura debbe coincidere con il numero di parametri formali nella corrispondente definizione non è esprimibile con una CFG. Tale caratteristica è catturata dal cosiddetto linguaggio delle repliche (che non è libero): LR = {αα|α ∈ T ∗ }.
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×