Capitolo 2 Linguaggi e Grammatiche

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Capitolo 2 Linguaggi e Grammatiche"

Transcript

1 Università degli Studi di Bologna Scuola di Ingegneria e Architettura Capitolo 2 Linguaggi e Grammatiche Corso di Laurea Magistrale in Ingegneria Informatica Anno accademico 2014/2015 Prof. ENRICO DENTI Dipartimento di Informatica Scienza e Ingegneria (DISI) COS È UN LINGUAGGIO? Dice il dizionario: Un linguaggio è un insieme di parole e di metodi di combinazione delle parole usate e comprese da una comunità di persone. È una definizione poco precisa: non evita le ambiguità dei linguaggi naturali non si presta a descrivere processi computazionali meccanizzabili non aiuta a stabilire proprietà Prof. Enrico Denti Università di Bologna A.A. 2014/2015 1

2 LA NOZIONE DI LINGUAGGIO Occorre una nozione di linguaggio più precisa Linguaggio come sistema formale che consenta di risponde a domande come: quali sono le frasi lecite? si può stabilire se una frase appartiene al linguaggio? come si stabilisce il significato di una frase? quali elementi linguistici primitivi? SINTASSI & SEMANTICA Sintassi: l insieme di regole formali per la scrittura di programmi in un linguaggio, che dettano le modalità per costruire frasi corrette nel linguaggio stesso. Semantica: l insieme dei significati da attribuire alle frasi (sintatticamente corrette) costruite nel linguaggio. Una frase può essere sintatticamente corretta e tuttavia non avere significato. Prof. Enrico Denti Università di Bologna A.A. 2014/2015 2

3 SINTASSI & SEMANTICA: UN.. ESEMPIO Una frase può essere sintatticamente corretta e tuttavia non avere significato. SINTASSI & SEMANTICA La sintassi è solitamente espressa tramite notazioni formali tipo BNF, EBNF, o diagrammi sintattici. La semantica è esprimibile: a parole (poco precisa e ambigua) mediante azioni semantica operazionale mediante funzioni matematiche semantica denotazionale mediante formule logiche semantica assiomatica Prof. Enrico Denti Università di Bologna A.A. 2014/2015 3

4 INTERPRETAZIONE DI UN LINGUAGGIO Un interprete per un linguaggio L è un programma che: accetta in ingresso le frasi di L e le esegue una per volta. L uscita di un interprete è dunque la valutazione di una frase di L. COMPILAZIONE DI UN LINGUAGGIO Un compilatore per un linguaggio L è un programma che: accetta in ingresso un programma scritto in L e lo riscrive in un altro linguaggio. L uscita di un compilatore è una riscrittura dell' intero programma (purché sintatticamente e semanticamente corretto) in un altro linguaggio. Prof. Enrico Denti Università di Bologna A.A. 2014/2015 4

5 ANALISI LESSICALE & SINTATTICA L analisi lessicale consiste nella individuazione delle singole parole (token) di una frase. L'analizzatore lessicale (o scanner) è il componente che, data una sequenza di caratteri, restituisce in sequenza i token (nomi, parole chiave, simboli di punteggiatura, etc.) che compaiono nella frase L analisi sintattica consiste nella verifica che una frase possa essere costruita in base alle regole grammaticali che descrivono il linguaggio. L' analizzatore sintattico (o parser) è il componente che, data la sequenza di token prodotti dallo scanner, produce una rappresentazione interna della frase, solitamente sotto forma di albero. ANALISI SEMANTICA L analisi semantica consiste calcolo del significato del linguaggio. Un analizzatore semantico è un componente che, data la rappresentazione intermedia prodotta dallo analizzatore sintattico, controlla la coerenza logica interna del programma (ad esempio se le variabili sono usate dopo essere state definite, se sono rispettate le regole di compatibilità in tipo, etc). Nel caso di un compilatore, l'analizzatore semantico può trasformare la rappresentazione delle frasi in una forma più adatta alla generazione di codice. Prof. Enrico Denti Università di Bologna A.A. 2014/2015 5

6 LINGUAGGIO: PROPRIETÀ DESIDERABILI Ogni linguaggio deve possedere alcune proprietà fondamentali: ogni deve essere effettivamente generabile nel caso di un linguaggio di programmazione, deve essere anche decidibile, ossia deve essere possibile stabilire se una qualunque frase appartiene o meno al linguaggio. DESCRIZIONE DI UN LINGUAGGIO Alcune Definizioni Alfabeto un alfabeto A è un insieme finito e non vuoto di simboli atomici. Esempio: A = { a, b } Stringa un stringa è una sequenza di simboli, ossia un elemento del prodotto cartesiano A n. Esempi: a ab aba bb Lunghezza di una stringa: il numero di simboli che la compongono. Stringa vuota ε : stringa di lunghezza zero. Si noti che A 0 = { ε } Prof. Enrico Denti Università di Bologna A.A. 2014/2015 6

7 DESCRIZIONE DI UN LINGUAGGIO Linguaggio L su un alfabeto A Un linguaggio L è un insieme di stringhe su A Frase (sentence) di un linguaggio: una stringa appartenente a quel linguaggio. Cardinalità di un linguaggio: il numero delle frasi del linguaggio linguaggio finito: ha cardinalità finita linguaggio infinito: ha cardinalità infinita Esempi: L1 = { aa, baa } L2 = { a n, n primo } L3 = { a n b n, n>0 } linguaggio a cardinalità finita linguaggio a cardinalità infinita linguaggio a cardinalità infinita DESCRIZIONE DI UN LINGUAGGIO Chiusura A* di un alfabeto A (o ling. universale su A) È l insieme infinito di tutte le stringhe composte con simboli di A: A * = A 0 A 1 A 2 Chiusura positiva A + di un alfabeto A È l insieme infinito di tutte le stringhe non nulle composte con simboli di A: A + = A * - { ε } Prof. Enrico Denti Università di Bologna A.A. 2014/2015 7

8 SPECIFICA DI UN LINGUAGGIO Come specificare il sottoinsieme di A* che definisce uno specifico linguaggio? per specificare un linguaggio finito basta elencarne le frasi per specificare un linguaggio infinito occorre invece una notazione finita capace però di descrivere senza ambiguità un insieme infinito di elementi. GRAMMATICA FORMALE Una Grammatica è una notazione formale con cui esprimere in modo rigoroso la sintassi di un linguaggio. Una grammatica è una quadrupla VT,VN,P,S dove: VT è un insieme finito di simboli terminali VN è un insieme finito di simboli non terminali P è un insieme finito di produzioni, ossia di regole di riscrittura α > β dove α e β sono stringhe: α V +, β V* ogni regola esprime una trasformazione lecita che permette di scrivere, nel contesto di una frase data, una stringa β al posto di un altra stringa α. S è un particolare simbolo non-terminale detto simbolo iniziale o scopo della grammatica. Prof. Enrico Denti Università di Bologna A.A. 2014/2015 8

9 GRAMMATICA FORMALE Una Grammatica è una I notazione simboli terminali formale sono con caratteri cui o esprimere in modo rigoroso stringhe la su sintassi un alfabeto di un A. linguaggio. Una grammatica è una quadrupla VT,VN,P,S dove: VT è un insieme finito di simboli terminali VN è un insieme finito di simboli non terminali P è un insieme finito di produzioni, ossia di regole di riscrittura α > β dove α e β sono stringhe: α V +, β V* I simboli non terminali sono dei meta-simboli e rappresentano ogni regola le diverse esprime categorie una trasformazione sintattiche. lecita che permette di scrivere, nel contesto di una frase data, una stringa β al posto di un altra stringa α. Gli insiemi VT e VN devono essere disgiunti: VT VN = S è un particolare simbolo non-terminale detto L unione VT VN si dice vocabolario della grammatica. simbolo iniziale o scopo della grammatica. GRAMMATICHE: CONVENZIONI CONVENZIONI SUI SIMBOLI i simboli terminali si indicano con lettere minuscole i meta-simboli si indicano con lettere MAIUSCOLE le lettere greche indicano stringhe di terminali e metasimboli CONVENZIONI SULLE PRODUZIONI una produzione α > β riscrive una stringa non nulla α V + sotto forma della nuova stringa (eventualmente anche nulla) β V* Prof. Enrico Denti Università di Bologna A.A. 2014/2015 9

10 FORME DI FRASI e FRASI Come ogni automa, una grammatica stabilisce le regole di una sorta di gioco : tutte le partite iniziano dallo scopo S e consistono nell applicare le produzioni P per generare le frasi del linguaggio descritto dalla grammatica. DEFINIZIONI Si dice forma di frase (sentential form) una qualsiasi stringa σ comprendente sia simboli terminali sia metasimboli derivabile dallo scopo S. Si dice frase una forma di frase comprendente solo simboli terminali. GRAMMATICHE: DERIVAZIONE Formalmente: siano G una grammatica VT,VN,P,S e siano α, β due stringhe (VN VT)*, α ε Si dice che β deriva direttamente da α (α α β) se le stringhe α, β si possono decomporre in α = η A δ β = η γ δ ed esiste la produzione A γ Si dice poi che β deriva da α (in generale) se esiste una sequenza di N derivazioni dirette α0 α1 α2... αn che da α possono infine produrre β α = α0 α1 α2... αn = β Prof. Enrico Denti Università di Bologna A.A. 2014/

11 SEQUENZA DI DERIVAZIONE Si dice sequenza di derivazione la sequenza di passi necessari per produrre una forma di frase σ a partire dallo scopo S mediante l applicazione di una o più regole di produzione. S σ + S σ S σ σ deriva da S con una sola applicazione di produzioni (in un solo passo) σ deriva da S con una o più applicazioni di produzioni (in uno o più passi) σ deriva da S con zero o più applicazioni di produzioni (in zero o più passi) GRAMMATICA & LINGUAGGIO Data una grammatica G, si dice perciò Linguaggio L G generato da G l insieme delle frasi derivabili dal simbolo iniziale S applicando le produzioni P ossia L G = {s VT* tale che S s } Prof. Enrico Denti Università di Bologna A.A. 2014/

12 ESEMPIO 1 Il linguaggio L = { a n b n, n>0 } può essere descritto dalla grammatica G = VT,VN,P,S dove: VT = { a, b} VN = { F } S VN = F P = { F a b F a F b } La prima regola stabilisce che lo scopo F può essere riscritto come a b, con ciò producendo la frase più corta del linguaggio La seconda regola stabilisce che lo scopo F può essere riscritto come a F b: data la presenza di F nella nuova frase, è possibile un nuovo passo generativo, che può essere svolto scegliendo, di nuovo, una qualsiasi delle due regole. Ogni stringa prodotta applicando tali regole un qualsiasi numero di volte, e che non contenga il meta-simbolo F, è una frase del linguaggio L G. GRAMMATICHE EQUIVALENTI Una grammatica G1 di dice equivalente a una grammatica G2 se genera lo stesso linguaggio Tuttavia, una grammatica può essere preferibile a un altra dal punto di vista dell analisi sintattica - e quindi del processo di compilazione. Stabilire se due grammatiche sono equivalenti è un problema indecidibile non esiste un algoritmo generale per decidere se due grammatiche sono equivalenti Prof. Enrico Denti Università di Bologna A.A. 2014/

13 GRAMMATICHE, LINGUAGGI & AUTOMI RICONOSCITORI Grammatiche di diversa struttura comportano linguaggi con diverse proprietà e implicano automi di diversa potenza computazionale per riconoscere tali linguaggi. CLASSIFICAZIONE DI CHOMSKY Tipo 0 Le grammatiche sono classificate in 4 tipi in base alla struttura delle produzioni Tipo 0: nessuna restrizione sulle produzioni In particolare, le regole possono specificare riscritture che accorciano la forma di frase corrente. Esempio (grammatica di tipo 0) S asbc CB BC SB bf FB bf FC cg GC cg G ε Possibile derivazione: S asbc abfc abcg abc lung=4 lung=3 Prof. Enrico Denti Università di Bologna A.A. 2014/

14 CLASSIFICAZIONE DI CHOMSKY Tipo 1 Le grammatiche sono classificate in 4 tipi in base alla struttura delle produzioni Tipo 1 (dipendenti dal contesto): produzioni vincolate alla forma: β A δ β α δ con β, δ, α (VT VN)*, ( A VN, α ε Quindi, A può essere sostituita da α solo nel contesto β A δ Le riscritture non accorciano mai la forma di frase corrente. Una definizione alternativa equivalente (a parte la generazione della stringa vuota) prevede infatti produzioni della forma α β con β α Grammatiche di Tipo 1: Esempio Esempio (grammatica di tipo 1) S abc asbc CB DB DB DC DC BC ab ab bb bb bc bc cc cc Infatti, secondo la definizione β A δ β α δ si può trasformare un metasimbolo per volta (A), lasciando intatto ciò che gli sta intorno: Osserva: la lunghezza del lato destro delle produzioni non è mai inferiore a quella del lato sinistro. S abc asbc β = ε δ = ε CB DB β = ε δ = B DB DC β = D δ = ε DC BC β = ε δ = C ab ab β = a δ = ε bb bb β = b δ = ε bc bc β = b δ = ε cc cc β = c δ = ε Prof. Enrico Denti Università di Bologna A.A. 2014/

15 Grammatiche di Tipo 1: osservazione La definizione di Chomsky: β A δ β α δ fa capire perché queste grammatiche siano definite dipendenti dal contesto (o contestuali). La definizione alternativa: α β con β α esprime lo stesso concetto in modo più pratico, ma non esplicita più l'idea di contesto. Essa però ammette produzioni formalmente vietate dalla definizione di Chomsky: ad esempio, BC CB Tuttavia, esiste sempre una grammatica equivalente secondo Chomsky: CB DB ; DB DC ; DC BC quindi i due formalismi sono equivalenti, purché la definizione originale non venga arricchita ammettendo la produzione S ε, che la definizione alternativa non può esprimere. CLASSIFICAZIONE DI CHOMSKY Tipo 2 Le grammatiche sono classificate in 4 tipi in base alla struttura delle produzioni Tipo 2 (libere dal contesto): produzioni vincolate alla forma: A α con α (VT VN)*, ( A VN Attenzione: non c'è più il vincolo α ε Qui A può sempre essere sostituita da α, indipendentemente dal contesto, giacché non esiste più l'idea stessa di contesto. CASO PARTICOLARE: se α ha la forma u oppure u B v, con u,v VT* e B VN, la grammatica si dice lineare. Prof. Enrico Denti Università di Bologna A.A. 2014/

16 CLASSIFICAZIONE DI CHOMSKY Tipo 3 Le grammatiche sono classificate in 4 tipi in base alla struttura delle produzioni Tipo 3 (grammatiche regolari): produzioni vincolate alle forme lineari: lineare a destra lineare a sinistra A σ A σ A σ B A B σ con A,B VN, e σ VT* Si intende che le produzioni di una data grammatica devono essere TUTTE o lineari a destra, o lineari a sinistra non mischiate. Si noti che anche qui σ può essere ε. GRAMMATICHE REGOLARI CASO PARTICOLARE Per grammatiche regolari, è sempre possibile e spesso conveniente trasformare la grammatica in forma strettamente lineare non più σ VT* (σ è una stringa di caratteri) lineare a destra lineare a sinistra A σ A σ A σ B A B σ ma bensì a VT (a è un singolo carattere) lineare a destra lineare a sinistra X a X a X a Y X Y a Prof. Enrico Denti Università di Bologna A.A. 2014/

17 GRAMMATICHE LINEARI - ESEMPI VT = { a, +, }, VN = { S } Grammatica G1 (lineare a sinistra: A B y, con y VT* ) S a S S + a S S a Grammatica G2 (lineare a destra: A x B, con x VT* ) S a S a + S S a S Grammatica G3 (G2 resa strettamente lineare a destra) S a S a A A + S A S Grammatica G4 (lineare a destra e anche a sinistra) S ciao Grammatica G5 (G4 resa strettamente lineare a destra) S c T T i U U a V V o RELAZIONE GERARCHICA Le grammatiche sono in relazione gerarchica: una grammatica regolare (Tipo 3) è un caso particolare di grammatica context-free (Tipo 2), che a sua volta è un caso particolare di grammatica context-dependent (Tipo 1), che a sua volta è ovviamente un caso particolare di grammatica qualsiasi (Tipo 0). NB: poiché le grammatiche di tipo 2 (e quindi di tipo 3) possono generare la stringa vuota ε, la relazione di inclusione vale solo se si conviene di ammettere nelle grammatiche tipo 1 anche la produzione S ε Prof. Enrico Denti Università di Bologna A.A. 2014/

18 CLASSIFICAZIONE DI CHOMSKY IL PROBLEMA DELLA STRINGA VUOTA Nella classificazione di Chomsky, Le grammatiche di Tipo 1 non ammettono la stringa vuota ε sul lato destro delle produzioni: β A δ β α δ α ε Viceversa, le grammatiche di Tipo 2 la ammettono: A α α V* (α può essere ε) e lo stesso vale per le grammatiche di Tipo 3: lin. a destra lin. a sinistra A σ A σ A σ B A B σ σ VT* (σ può essere ε) MA COME? NON C'È CONTRADDIZIONE?? CLASSIFICAZIONE DI CHOMSKY IL PROBLEMA DELLA STRINGA VUOTA COME È POSSIBILE che le grammatiche siano in relazione gerarchica tra loro e quindi ogni grammatica di tipo 2 sia anche di tipo 1 e ognuna di tipo 3 sia anche di tipo 2 e quindi anche tipo 1 e al contempo la stringa vuota non sia ammessa nel Tipo 1 e sia invece ammessa nei Tipi 2 e 3? La assenza di contraddizione è dovuta al seguente TEOREMA le produzioni di grammatiche di Tipo 2 (e quindi anche 3) possono sempre essere riscritte in modo da evitare la stringa vuota: al più, possono contenere la regola S ε Prof. Enrico Denti Università di Bologna A.A. 2014/

19 CLASSIFICAZIONE DI CHOMSKY IL PROBLEMA DELLA STRINGA VUOTA TEOREMA Se G è una grammatica context free con produzioni della forma A α, con α V* (cioè, α può essere ε) allora esiste una grammatica context free G che genera lo stesso linguaggio L(G) ma le cui produzioni hanno o la forma A α, con α V + (α non è ε) oppure la forma S ε, ed S non compare sulla destra in nessuna produzione. In pratica, il teorema assicura che la sola differenza fra una grammatica context free con ε -rules o senza esse è che il linguaggio generato dalla prima include la stringa vuota. I linguaggi di programmazione (Pascal, C, ) hanno spesso produzioni che ammettono la stringa vuota, di solito per descrivere parti opzionali. ELIMINAZIONE DELLE ε RULES dalle produzioni di grammatiche context-free Come determinare la grammatica equivalente G? Siano YESε l insieme dei metasimboli A 1..A k da cui si può ricavare ε NOε l insieme dei metasimboli B 1..B m da cui non si può ricavare ε Allora: se G contiene la regola S ε, anche G contiene tale regola se G contiene altre regole della forma X ε, G non le contiene se G contiene una produzione della forma X C 1 C 2 C r (r 1), G contiene la produzione X α 1 α 2 α r, dove: α i = C i se C i VT NOε α i = C i ε se C i YESε con il vincolo che non tutti gli α i possono essere ε. Prof. Enrico Denti Università di Bologna A.A. 2014/

20 ELIMINAZIONE DELLE ε RULES: Esempio 1 Si consideri l'esempio a lato. Qui YESε = {A} e NOε = {S, B}. G non contiene la regola S ε quindi neppure G la contiene. G contiene una regola della forma X ε È la regola A ε, che va quindi tolta. Al suo posto, poiché A YESε, ogni occorrenza di A va sostituita da(a ε) Nel caso della regola S A B B ciò non ha effetti, poiché (A ε)b riproduce A B B Invece, A aa diventa A a(a ε) Semplificando e riscrivendo si ottiene la nuova grammatica G Grammatica G (con ε -rules) S A B B A a A ε B b B c Grammatica G S A B B A B a(a ε) b B c Grammatica G S A B B A a A a B b B c La nuova grammatica non genera mai la stringa vuota. ELIMINAZIONE DELLE ε RULES: Esempio 2 Grammatica G (con ε -rules) S A B A a A ε B b B ε Grammatica G S (A ε)(b ε) A B a(a ε) b(b ε) Grammatica G S A B B A ε A a A a B b B b La nuova grammatica può generare la stringa vuota solo al primo passo della derivazione (cioè dallo scopo): dunque, il linguaggio L(G) comprende la stringa vuota ma le forme di frase non possono comunque accorciarsi. Prof. Enrico Denti Università di Bologna A.A. 2014/

21 GRAMMATICHE e LINGUAGGI Poiché le grammatiche sono in relazione gerarchica tra loro, un linguaggio può essere generato da più grammatiche, anche di tipo diverso un linguaggio di Tipo 3 potrebbe in realtà essere generato anche da grammatiche di Tipo 2, 1, o 0 un linguaggio di Tipo 2 potrebbe in realtà essere generato anche da grammatiche di Tipo 1 o 0 un linguaggio di Tipo 1 potrebbe in realtà essere generato anche da grammatiche di Tipo 0 Il motivo è che non sempre si trova subito la grammatica più semplice per un linguaggio. CONSEGUENZA Se una grammatica G genera il linguaggio L(G) non è detto che L(G) sia dello stesso tipo di G ossia non è detto che una grammatica libera da contesto generi un linguaggio libero da contesto, etc. (potrebbe in realtà generarne uno più semplice) Ergo, dicendo che un linguaggio L(G) è di un certo tipo s'intende che è di quel tipo la grammatica più semplice in grado di generarlo si parla quindi di linguaggi dipendenti da contesto (o contestuali), liberi da contesto (o non contestuali), lineari, regolari. Prof. Enrico Denti Università di Bologna A.A. 2014/

22 ESEMPIO a n b n c n (1/3) Il linguaggio L = { a n b n c n, n 0} è di tipo 1 in quanto esiste une grammatica di tipo 1 che lo genera: G1 S abc asbc CB DB DB DC DC BC ab ab bb bb bc bc cc cc La stessa grammatica diventa più compatta se espressa in accordo alla definizione alternativa di tipo 1: G2 S abc asbc CB BC ab ab bb bb bc bc cc cc Esso è però esprimibile anche con una grammatica di tipo 0, come ad esempio quella mostrata in precedenza: G0 S asbc CB BC SB bf FB bf FC cg GC cg G ε ESEMPIO a n b n c n (2/3) Una ulteriore grammatica più semplice, sempre espressa in accordo alla definizione alternativa di tipo 1, è G3 S abc absc Ba ab Bb bb IMPORTANTE: A differenza di quel che accade nel tipo 2 (e nel tipo 3), in una grammatica di tipo 1 non è garantito che qualunque sequenza di derivazione porti a una frase. È possibile infatti incontrare sequenze di derivazione che "rimangono a metà", ossia che portano a forme di frase non ulteriormente riscrivibili, cioè che non sono frasi: si tratta di "rami morti", che non portano a frasi del linguaggio. Prof. Enrico Denti Università di Bologna A.A. 2014/

23 ESEMPIO a n b n c n (3/3) Esempio di derivazione della frase aabbcc. G2 S abc asbc CB BC ab ab bb bb bc bc cc cc S asbc aabcbc aabcbc aabcbc?? no! S asbc aabcbc aabbcc aabbcc aabbcc aabbcc aabbcc Nota: con G1 la sequenza è analoga, ma il passaggio da aabcbc a aabbcc richiede tre passi anziché uno. G3 S abc absc Ba ab Bb bb S absc ababcc aabbcc aabbcc GRAMMATICHE DI TIPO 1 e DI TIPO 2 Qual è la caratteristica cruciale che discrimina una grammatica di tipo 1 da una di tipo 2? Dice Chomsky: Tipo 1: produzioni della forma σ A δ α Tipo 2: produzioni della forma A α In particolare, il tipo 1 ammette produzioni della forma BC CB che scambiano due simboli. Questa caratteristica è impossibile da esprimere nel tipo 2 dove il lato sinistro della produzione ha un solo simbolo. Prof. Enrico Denti Università di Bologna A.A. 2014/

24 GRAMMATICHE REGOLARI e CONTEXT-FREE Cos è che discrimina una grammatica regolare da una grammatica context-free? Dice Chomsky: Context-free: produzioni della forma A α con α (VT VN)*, ( A VN (α può anche essere ε) Regolari: produzioni lineari, della forma A σ o A σ B (a destra) oppure A σ o A B σ (a sinistra) con A,B VN, σ VT* (σ può ovviamente essere ε) Ma in pratica, qual è la caratteristica cruciale che fa di una grammatica context-free una grammatica regolare? SELF - EMBEDDING Se una grammatica G contiene un simbolo non terminale A tale che A α 1 A α 2 (con α 1,α 2 V + ) A si dice autoinclusiva (self-embedded), e la grammatica G si dice contenere self-embedding. TEOREMA: una grammatica context-free che non contenga self-embedding genera un linguaggio regolare La presenza di self-embedding è dunque la caratteristica cruciale che differenzia le grammatiche di tipo 2 da quelle di tipo 3. Attenzione, però: può talora accadere che una grammatica con self-embedding generi comunque un linguaggio L(G) regolare. Prof. Enrico Denti Università di Bologna A.A. 2014/

25 UN ESEMPIO di SELF - EMBEDDING La grammatica G: S asc S A A bac A ε presenta self-embedding e genera il linguaggio L(G): L(G) = { a n b m c n+m n,m 0 } Il ruolo del self-embedding è introdurre una ricorsione in cui si aggiungono contemporaneamente simboli a sinistra e a destra, garantendo di procedere "di pari passo". È essenziale per definire linguaggi le cui frasi devono contenere simboli bilanciati, come ad esempio le parentesi: S (S) S a Questa grammatica genera il linguaggio L(G) = { ( n a ) n n 0 } "FINTO" SELF EMBEDDING (1/3) A volte, però, nonostante G contenga self-embedding, L(G) è regolare, perché la regola con self-embedding è disattivata da altre regole più generali. Identificare casi del genere non è banale Riferimento: "Self-embedded context-free grammars with regular counterparts", by S.Andrei, W. Chin, S. Cavadini; Acta Informatica 40, , 2004, Springer ESEMPIO 1 (per comodità, il metasimbolo indica regole alternative) S a S a X X a X b X a b In realtà L(G) è regolare: comprende tutte le possibili sequenze di a e b Qui la regola con self-embedding non riesce a vincolare davvero le frasi alla forma a n Y a n perché la parte centrale X si espande in una sequenza qualunque di a e b, che vanifica il vincolo di ugual numero di a in testa e in coda. Prof. Enrico Denti Università di Bologna A.A. 2014/

26 "FINTO" SELF EMBEDDING (2/3) ESEMPIO 2 S a b S b a a b a Anche qui in realtà L(G) è regolare: L(G) = { (a b) 2n+1 a, n 0 } Qui la regola con self-embedding viene disattivata in un modo particolarmente subdolo e sottile: apparentemente i due lati "sinistro" e "destro" crescono in parallelo, producendo un numero identico di gruppi (a b) k e (b a) k.. ma sul più bello, nel mezzo viene piazzato un a b a che spariglia le carte e "distrugge i confini" fra i due gruppi (a b) k e (b a) k rendendoli indistinguibili! S a b S b a a b a b S b a b a a b a b a b S b a b a b a a b a b a b. S. b a b a b a a b a b a b a b a b a b a b a che altro non è che una sequenza di una quantità dispari di gruppi a b, seguiti da una a finale ovvero, un linguaggio regolarissimo! Grammatica di tipo 3 alternativa: S X a X a b X a b a b "FINTO" SELF EMBEDDING (3/3) ESEMPIO 3 S a S a ε Anche qui L(G) è in realtà regolare: L(G) = { (a a) 2n, n 0 } Grammatica di tipo 3 alternativa: S a a S ε Osserviamo che questo accade perché, con un alfabeto di un solo carattere, si possono generare in effetti solo frasi molto semplici: anzi, a pensarci bene.. è impossibile distinguere un "gruppo di sinistra" da un "gruppo di destra", se sono fatti tutti solo da un singolo simbolo! Tale proprietà è generalizzata dal seguente: TEOREMA: ogni linguaggio context-free di alfabeto unitario è un linguaggio regolare Prof. Enrico Denti Università di Bologna A.A. 2014/

27 RICONOSCIBILITÀ dei LINGUAGGI I linguaggi generati da grammatiche di tipo 1 (quindi anche di tipo 2 e tipo 3) sono riconoscibili (decidibili), ossia esiste un algoritmo per decidere se una frase (stringa in VT + ) appartiene o meno al linguaggio. Un tale procedimento può invece non esistere per linguaggi generati da grammatiche di tipo 0 La sintassi di un linguaggio di programmazione è sempre descritta tramite (classi speciali di) grammatiche context-free (tipo 2), perché ciò assicura che il traduttore possa essere realizzato in modo efficiente ANALIZZATORE SINTATTICO (parser) Alcune sottoparti dei linguaggi di programmazione (numeri e identificatori) sono descritte con grammatiche regolari (tipo 3) ANALIZZATORE LESSICALE (scanner o lexer) QUALI MACCHINE per QUALI LINGUAGGI? Chi riconosce i diversi tipi di linguaggi? GRAMMATICHE Tipo 0 AUTOMI RICONOSCITORI Se L(G) è riconoscibile, serve una Macchina di Turing Tipo 1 Tipo 2 (context-free) Tipo 3 (regolari) Macchina di Turing (con nastro di lunghezza proporzionale alla frase da riconoscere) Push-Down Automaton (PDA) (cioè ASF + stack) Automa a Stati Finiti (ASF) Prof. Enrico Denti Università di Bologna A.A. 2014/

28 GRAMMATICHE B.N.F. In una Grammatica BNF le regole di produzione hanno la forma α ::= β con α V +, β V* i meta-simboli X VN hanno la forma nome il meta-simbolo indica l alternativa Questa estensione permette di esprimere un insieme di regole aventi la stessa parte sinistra: X ::= A 1... X ::= A N in forma compatta: X ::= A 1 A 2.. A N G = VT,VN,P,S, dove: ESEMPIO 2 VT = { il, gatto, topo, sasso, mangia, beve } VN = { <frase>, <soggetto>, <verbo>, <compl-ogg>, <articolo>, <nome> } S = <frase> P = { } <frase> ::= <soggetto> <verbo> <compl-ogg> <soggetto> ::= <articolo><nome> <articolo> ::= il <nome> ::= gatto topo sasso <verbo> ::= mangia beve <compl-ogg> ::= <articolo> <nome> Prof. Enrico Denti Università di Bologna A.A. 2014/

29 ESEMPIO 2 ESEMPIO: derivazione della frase il gatto mangia il topo (ammesso che tale frase sia derivabile) <frase> <soggetto> <verbo> <compl-ogg> <articolo> <nome> <verbo> <compl-ogg> il <nome> <verbo> <compl-ogg> il gatto <verbo> <compl-ogg> il gatto mangia <compl-ogg> il gatto mangia <articolo><nome> il gatto mangia il <nome> il gatto mangia il topo EXTENDED B.N.F. (EBNF) La notazione EBNF è una forma estesa della notazione B.N.F., rispetto a cui introduce alcune notazioni compatte per alleggerire la scrittura delle regole di produzione Prof. Enrico Denti Università di Bologna A.A. 2014/

30 ESEMPIO 3: NUMERI NATURALI G = VT,VN,P,S dove: VT = { 0,1,2,3,4,5,6,7,8,9 } VN = { <num>, <cifra>, <cifra-non-nulla> } S = <num> P = { <num> ::= <cifra> <cifra-non-nulla> {<cifra>} <cifra> ::= 0 <cifra-non-nulla> <cifra-non-nulla> ::= } EBNF ESEMPIO 3: NUMERI NATURALI La stessa sintassi può essere espressa tramite un diagramma sintattico 0 cifra-non-nulla Secondo questa sintassi: 0 sì 131 sì 013 NO cifra Prof. Enrico Denti Università di Bologna A.A. 2014/

31 ESEMPIO 4: NUMERI INTERI Sintassi analoga alla precedente ma con la possibilità di un segno (+,-) davanti al numero naturale Quindi: stesse regole di produzione più una per gestire il segno stesso alfabeto terminale più i due simboli + e - ESEMPIO 4: NUMERI INTERI G = VT,VN,P,S, dove: VT = { 0,1,2,3,4,5,6,7,8,9,+,- } VN = {<int>, <num>, <cifra>, <cifra-non-nulla> } P = { } EBNF <int> ::= [+ -] <num> <num> ::= 0 <cifra-non-nulla> {<cifra>} <cifra> ::= 0 <cifra-non-nulla> <cifra-non-nulla> ::= Prof. Enrico Denti Università di Bologna A.A. 2014/

32 ESEMPIO 5: IDENTIFICATORI G = VT,VN,P,S Nell uso pratico, quasi sempre si danno solo le regole di produzione, definendo VT, VN e S implicitamente. Quindi: P = { } <id> ::= <lettera> { <lettera> <cifra>} <lettera> ::= A B C D... Z <cifra> ::= ESEMPIO 5: IDENTIFICATORI G = VT,VN,P,S Nell uso pratico, quasi sempre si danno solo le regole di produzione, definendo VT, VN e S implicitamente. Quindi: P = { } scopo VN VN <id> ::= <lettera> { <lettera> <cifra>} <lettera> ::= A B C D... Z <cifra> ::= VT VT Prof. Enrico Denti Università di Bologna A.A. 2014/

33 ALBERI DI DERIVAZIONE Se G è una grammatica libera da contesto (tipo 2), si può introdurre il concetto di albero di derivazione: ogni nodo dell albero è associato a un simbolo del vocabolario V = VT VN la radice dell albero coincide con lo scopo S se a 1, a 2,..., a k sono i k figli ordinati di un dato nodo X (associato al simbolo X VN), allora la grammatica G prevede la produzione X ::= A 1 A 2... A k dove A i è il simbolo associato al nodo a i NB: l'albero di derivazione non esiste per grammatiche di tipo 1 (e 0) perché in tali casi il lato sinistro delle produzioni ha più di un simbolo e dunque i nodi figli avrebbero più di un padre (non sarebbe più un albero ma un generico grafo). RIPRENDENDO L ESEMPIO 2 G = VT,VN,P,S con VT = { il, gatto, topo, sasso, mangia, beve } VN = { <frase>, <soggetto>, <verbo>, <compl-ogg>, <articolo>, <nome> } S = <frase> P = { <frase> ::= <soggetto> <verbo> <compl-ogg> } <soggetto> ::= <articolo><nome> <articolo> ::= il <nome> ::= gatto topo sasso <verbo> ::= mangia beve <compl-ogg> ::= <articolo> <nome> Questa grammatica è context free, quindi è possibile associarle un albero di derivazione. Prof. Enrico Denti Università di Bologna A.A. 2014/

34 RIPRENDENDO L ESEMPIO 2 Derivazione della frase il gatto mangia il topo (ammesso che tale frase sia derivabile) frase soggetto verbo compl-ogg articolo nome mangia articolo nome il gatto il topo RIPRENDENDO L ESEMPIO 4 G = VT,VN,P,S, dove: VT = { 0,1,2,3,4,5,6,7,8,9,+,- } VN = {<int>, <num>, <cifra>, <cifra-non-nulla> } P = { } <int> ::= [+ -] <num> <num> ::= 0 <cifra-non-nulla> {<cifra>} <cifra> ::= 0 <cifra-non-nulla> <cifra-non-nulla> ::= EBNF Anche questa grammatica è context free, quindi ammette un albero di derivazione. Prof. Enrico Denti Università di Bologna A.A. 2014/

35 RIPRENDENDO L ESEMPIO 4 Qui una regola è scritta in EBNF (Extended BNF), che non è direttamente mappabile su un albero: <num> ::= 0 <cifra-non-nulla> { <cifra> } Occorre perciò riscriverla in BNF standard, ricordando le equivalenze: X ::= {a} B X ::= B ax X ::= B {a} X ::= B Xa Dunque, la regola: <num> ::= <cifra-non-nulla> {<cifra>} va riscritta come: <num> ::= <cifra-non-nulla> <num> <cifra> RIPRENDENDO L ESEMPIO 4 Albero di derivazione del numero intero -3457: <int> - <num> <num> <cifra> <num> <cifra> <cifra-non-nulla> <num> <cifra> <cifra-non-nulla> 7 <cifra-non-nulla> <cifra-non-nulla> Prof. Enrico Denti Università di Bologna A.A. 2014/

36 DERIVAZIONI CANONICHE DERIVAZIONE LEFT-MOST (deriv. canonica sinistra) A partire dallo scopo della grammatica, si riscrive sempre il simbolo non-terminale più a sinistra. DERIVAZIONE RIGHT-MOST (deriv. canonica destra) A partire dallo scopo della grammatica, si riscrive sempre il simbolo non-terminale più a destra. AMBIGUITÀ DI GRAMMATICHE CONTEXT-FREE Una grammatica context free G è ambigua se esiste almeno una frase di L(G) che ammette due o più derivazioni canoniche sinistre distinte, oppure per la quale esistono almeno due alberi sintattici distinti. Ovviamente l ambiguità è una caratteristica indesiderabile ESEMPIO A ::= A + A A ::= a La frase a+a+a è ambigua: A a A + A A + A A A + A + A A a a a a a Prof. Enrico Denti Università di Bologna A.A. 2014/

37 AMBIGUITÀ DI GRAMMATICHE CONTEXT-FREE Grado di ambiguità: numero di alberi sintattici distinti Stabilire se una grammatica context free G è ambigua è un problema indecidibile però in pratica un certo numero di derivazioni è spesso sufficiente per "convincersi" (non per dimostrare!) dell'ambiguità di G Un linguaggio si dice inerentemente ambiguo se tutte le grammatiche che lo generano sono ambigue. Esempio: L = { a n b n c * } { c * a n b n } dove n 0 frasi di L: ε, c, cc, ccc,, ab, abc, abcc, abccc, aabb, aabbc, aabbcc,.. cab, ccab, cccab, caabb, ccaabb, cccaabb, LA STRINGA VUOTA La stringa vuota può far parte delle frasi generate da una grammatica di Tipo 0, poiché la generica regole di produzione α > β prevede α V +, β V* Questo è il motivo per cui, in un tale linguaggio, la generica forma di frase può accorciarsi durante la riscrittura. La stringa vuota invece non può far parte delle frasi generate da una grammatica di Tipo 1 (e quindi neanche di tipo 2 e 3) perché lì vige la condizione α ε e perciò la generica forma di frase non può mai accorciarsi. RICORDA: questo non è in contraddizione con il fatto che le produzioni di grammatiche di Tipo 2 e 3 possano "apparentemente" ammettere ε sul lato destro delle produzioni, perché esiste sempre una grammatica equivalente senza ε-rules (escluso al più S). Prof. Enrico Denti Università di Bologna A.A. 2014/

38 LA STRINGA VUOTA In molte situazioni, tuttavia, fa comodo avere la stringa vuota ε nel linguaggio (molti linguaggi di programmazione la includono) senza che ciò implichi però un mutamento del tipo di grammatica e delle relative proprietà. Questo può essere ottenuto ammettendo produzioni della forma S ε purché S sia lo scopo della grammatica e non compaia quindi nella parte destra di alcuna produzione. In tal modo, quella produzione può essere usata solo al primo passo di derivazione e quindi le stringhe non possono comunque accorciarsi. LA STRINGA VUOTA Si può dimostrare che se L è un linguaggio di tipo 0, 1, 2, o 3 anche i linguaggi L {ε} e L {ε} sono dello stesso tipo Ad esempio, le produzioni: S ::= ε X X ::= ab a X b definiscono il linguaggio (context-free) L = { a n b n, n 0} (Vale ovviamente la convenzione a 0 = b 0 = ε) Prof. Enrico Denti Università di Bologna A.A. 2014/

39 FORME NORMALI FORME NORMALI Un linguaggio context free non vuoto può essere sempre generato da una grammatica context free G tale che: ogni simbolo, terminale o non terminale, compare nella derivazione di qualche frase di L (ossia non esistono simboli o meta simboli inutili) non ci sono produzioni della forma A B con A,B VN (ossia non esistono produzioni che cambiano solo nome a un simbolo non terminale) se il linguaggio non comprende la stringa vuota (ε L) allora non ci sono produzioni della forma A ε. Prof. Enrico Denti Università di Bologna A.A. 2014/

40 FORME NORMALI In particolare si può fare in modo che tutte le produzioni abbiano una forma ben precisa: forma normale di Chomsky produzioni della forma A B C a con A,B,C VN, a VT ε forma normale di Greibach (per linguaggi privi di ε) produzioni della forma A a α con A VN, a VT, α VN* La forma normale di Greibach facilita, come si vedrà, la costruzione di riconoscitori. FORME NORMALI : ESEMPIO 1 Esiste un algoritmo che trasforma ogni grammatica di tipo 2 in forma normale di Chomsky. Qui lo vediamo solo applicato a un esempio. Grammatica data: S d A c B A d A A c S c B c B B d S d Forma normale di Chomsky S M A N B M d N c A M P N S c P A A B N Q M S d Q B B La trasformazione in forma di Greibach richiede alcune tecniche extra. Prof. Enrico Denti Università di Bologna A.A. 2014/

41 TRASFORMAZIONI IMPORTANTI Per facilitare la costruzione dei riconoscitori, è spesso rilevante poter trasformare la struttura delle regole di produzione per renderle più adatte allo scopo. Alcune trasformazioni particolarmente importanti sono la sostituzione la fattorizzazione l'eliminazione della ricorsione sinistra. Tra gli altri usi, queste trasformazioni sono la base per trasformare una qualsiasi grammatica di tipo 2 in forma normale di Greibach. SOSTITUZIONE La sostituzione consiste nell espandere un simbolo non terminale che compare nella parte destra di una regola di produzione, sfruttando a tale scopo un'altra regola di produzione. Nella grammatica a lato è possibile sostituire il metasimbolo S nella seconda produzione, usando a tale scopo la prima produzione. Espandiamo quindi S come indicato: la nuova regola per X non contiene più alcun riferimento a S ESEMPIO S X a X b Q S c d ESEMPIO S X a X b Q X a c d Prof. Enrico Denti Università di Bologna A.A. 2014/

42 FATTORIZZAZIONE La fattorizzazione consiste nell isolare il prefisso più lungo comune a due produzioni. Nella grammatica a lato è chiaramente possibile isolare il prefisso ascomune alle prime due produzioni. Raccogliamo quindi a fattore comune il prefisso comune as e introduciamo un nuovo meta-simbolox per esprimere la parte che segue il prefisso comune. ESEMPIO S a S b a S c ESEMPIO S a S ( b c) ESEMPIO S a S X X b c ELIMINAZIONE DELLA RICORSIONE SINISTRA E' una trasformazione sempre possibile, articolata in due passi: Fase 1: eliminazione dei cicli ricorsivi a sinistra Fase 2: eliminazione della ricorsione sinistra diretta. Fase preliminare si stabilisce per convenzione una relazione d ordine fra i simboli non terminali coinvolti del ciclo ricorsivo Nel nostro caso, sia dunque C > B > A ESEMPIO di ciclo ricorsivo a sinistra A B a B C b C A c p Fase 1 si modificano tutte le produzioni del tipo Y Xα in cui Y > X, sostituendo a X le forme di frase stabilite dalle produzioni relative a X Fase 2 le produzioni ricorsive dirette X Xα psi modificano introducendo un metasimbolo Z e scrivendo X p pze Z α αz Si ottiene quindi: A B a B C b C C b a c p Ergo, C C b a c p diventa C p p Z Z b a c b a c Z Prof. Enrico Denti Università di Bologna A.A. 2014/

43 FORME NORMALI : ESEMPIO 2 Tramite sostituzioni ed eliminazioni di ricorsioni sinistre si può trasformare ogni grammatica in forma normale di Greibach. Qui lo vediamo solo applicato a un esempio. Grammatica data: S X a X b S S c d Forma normale di Greibach (A p α, A VN, p VT, α VN*) eliminazione ciclo ricorsivo a sinistra eliminazione ricorsione sinistra diretta sostituzione ridenominazione dei terminali tramite non-terminali ausiliari FORME NORMALI : ESEMPIO 2 Fase 1 relazione d ordine fra i simboli non terminali coinvolti del ciclo ricorsivo:x> S Fase 2 modifica della produzione X S c sostituendo a S la produzione S X a Fase 3 eliminazione della ricorsione sinistra diretta X Xα d introducendo il metasimbolo Z tale che Z α αz e X ::= pz p Fase 4 sostituzione del simbolo X nella prima regola Fase 5 introduzione dei non-terminali ausiliari A e C per rappresentare a e c dove appropriato Grammatica data: S X a X b S S c d Si ottiene quindi: S X a X b S X a c d S X a X b S X d Z d Z a c a c Z S bsa dza da Z ac acz S bsa dza da Z ac acz A a C c Prof. Enrico Denti Università di Bologna A.A. 2014/

44 IL "PUMPING LEMMA" COME CAPIRE SE UN LINGUAGGIO (NON) È DI TIPO 2 (3)? Capire se un linguaggio è context-free (o regolare) "solo guardandolo" in generale non è banale d'altronde, non basta pensare alle regole di produzione perché nessuno assicura che le pensiamo "bene" Sarebbe utile un teorema per decidere la questione: il PUMPING LEMMA dà una condizione necessaria (non sufficiente) perché un linguaggio sia context-free (o regolare) come tale, può essere usato per dimostrare "in negativo" che un linguaggio NON SIA context-free (o regolare).. ma purtroppo non per affermarlo "in positivo". Prof. Enrico Denti Università di Bologna A.A. 2014/

45 IL PUMPING LEMMA (o "lemma del pompaggio") L'idea di fondo è che in un linguaggio infinito, ogni stringa sufficientemente lunga deve avere una parte che si ripete e che come tale può essere "pompata" un qualunque numero di volte, ottenendo sempre altre stringhe del linguaggio. è con l'uso di questo lemma che si dimostra, ad esempio: che L1 = {a n b n c n } non è context-free, che L2 = {a p, p primo } non è regolare. Il lemma ha formulazioni leggermente diverse a seconda che si tratti di linguaggi context-free o regolari, ma la sostanza resta identica. IL PUMPING LEMMA per linguaggi context-free Se L è un linguaggio context-free, esiste un intero N tale che, per ogni stringa z di lunghezza almeno pari a N: z può essere riscritta come: z = uvwxy z N la parte centrale vwx ha lunghezza limitata: vwx N v e x non sono entrambi nulle: vx 1 tutte le stringhe della forma uv i wx i y L In pratica, il lemma afferma che le due sottostringhe v e x possono essere "pompate" quanto si vuole ottenendo sempre stringhe di L. Il numero N dipende caso per caso dallo specifico linguaggio La dimostrazione si basa sulle lunghezze dei cammini nell'albero di derivazione associato (cfr. Hopcroft/Motwani/Ullman, p. 292) Prof. Enrico Denti Università di Bologna A.A. 2014/

46 IL PUMPING LEMMA per linguaggi regolari Se L è un linguaggio regolare, esiste un intero M tale che, per ogni stringa z di lunghezza almeno pari a M: z può essere riscritta come: z = xyw z M la parte centrale xy ha lunghezza limitata: xy M y non è nulla: y 1 tutte le stringhe della forma xy i w L In pratica, qui il lemma afferma che la sottostringa y può essere "pompata" quanto si vuole ottenendo sempre stringhe di L. Il numero M dipende caso per caso dallo specifico linguaggio La dimostrazione si basa sull'automa a stati associato (cfr. Hopcroft/Motwani/Ullman, p. 135) PUMPING LEMMA: ESEMPIO 1 L = {a p, p primo } non è regolare. se L fosse regolare, esisterebbe un intero M che soddisfarebbe il pumping lemma; sia allora P un primo M+2 (esso esiste perché i numeri primi sono infiniti): consideriamo allora la stringa z = a P scomponiamo ora z nei tre pezzi xyw, con y = r; ne segue che xw = p r in base al lemma, se L fosse regolare, la nuova stringa xy p-r w dovrebbe anch'essa appartenere al linguaggio peccato però che la lunghezza di tale stringa sia: xy p-r w = xw + (p-r) y = (p-r) + (p-r) y = (p-r)(1+ y ) = (p-r)(1+r) ovvero non un numero primo pertanto, essa non appartiene a L e dunque esso non è regolare. Prof. Enrico Denti Università di Bologna A.A. 2014/

47 PUMPING LEMMA: ESEMPIO 2 (1) L = {a n b n c n } non è context-free se L fosse context-free, esisterebbe un intero N che soddisfarebbe il pumping lemma; consideriamo allora la stringa z = a N b N c N scomponiamo z nei cinque pezzi uvwxy, con vwx N poiché fra l'ultima "a" e la prima "c" ci sono N posizioni, il pezzo centrale "vwx" non può contenere sia "a" sia "c", perché se contiene l'una, non contiene l'altra. Questo apre due possibilità: 1. "vwx" non contiene "c": allora "vx" è fatta solo di "a" e "b". Ma allora "uwy", che in base al pumping lemma dovrebbe appartenere a L, ha tutte le "c" (che sono N) ma meno "a" o meno "b" del necessario, ergo non appartiene a L assurdo 2. vwx" non contiene "a": allora"vx" è fatta solo di "b" e "c", dunque "uwy" ha N "a" ma meno "b" o meno "c" del necessario, ergo non appartiene a L assurdo. PUMPING LEMMA: ESEMPIO 2 (2) ESEMPIO: N=6 z = "aaaaaabbbbbbcccccc" Scomponiamo z nei cinque pezzi uvwxy, con vwx N si può fare in vari modi, dipende da come e dove si prende vwx supponiamo di prenderla lunga 5 (comunque, al più 6): la suddivisione può quindi essere una delle seguenti illustrate in tabella: u vwx y aaaaa abbbb bbcccccc aaaaaa bbbbb bcccccc aaaaaab bbbbb cccccc aaaaaabb bbbbc ccccc come si vede, vwx non può contenere sia "a" sia "c": se contiene le une, per evidenti motivi di lunghezza non può contenere le altre. Prof. Enrico Denti Università di Bologna A.A. 2014/

48 PUMPING LEMMA: ESEMPIO 2 (3) supponiamo, per fissare le idee, che la scelta sia questa: u vwx y aaaaa abbbb bbcccccc alla luce di ciò, la sotto-stringa vx, lunga almeno 1 ma priva del pezzo centrale w, a sua volta è fatta solo di "a" e "b" qual è il pezzo centrale w in " abbbb"? di nuovo, ci sono più possibilità: v w x a bbbb (vuota) (vuota) abbb b ab bbb (vuota) (vuota) abb bb ora, fra le altre stringhe del linguaggio, della forma uv i wx i y, c'è anche quella per cui i=0, ossia in cui v e x mancano: è la stringa uwy, ossia.. PUMPING LEMMA: ESEMPIO 2 (4)..ossia, dato che u e y sono quelle scelte da noi poco fa: u vwx y aaaaa abbbb bbcccccc e che il pezzo centrale w è uno di questi: v w x a bbbb (vuota) (vuota) abbb b ab bbb (vuota) (vuota) abb bb la stringa uwy risulta "aaaaa" + w + "bbcccccc", ovvero ha tutte le sei "c" previste in fondo, ma meno "a" e/o meno "b" del necessario, perché alcune sono state "mangiate" dalla sotto-stringa vx ergo, la stringa uwy non appartiene al linguaggio, violando l'ipotesi. Prof. Enrico Denti Università di Bologna A.A. 2014/

49 ESPRESSIONI REGOLARI ESPRESSIONI REGOLARI Una classe di particolare interesse è quella dei linguaggi descritti dalle espressioni regolari. Le espressioni regolari sono tutte e sole le espressioni costruibili tramite le seguenti regole: la stringa vuota ε è una espressione regolare dato un alfabeto A, ogni elemento a A è una espressione regolare se X e Y sono espressioni regolari, lo sono anche: X+Y (unione), X Y (concatenazione), X* (chiusura), definite come segue: Prof. Enrico Denti Università di Bologna A.A. 2014/

50 ESPRESSIONI REGOLARI Unione (+) X + Y = { x x X x Y } (operatore meno prioritario) Concatenazione ( ) X Y = { x x= a b, a X b Y } { } X = { } per qualsiasi X Chiusura(*) X * = X 0 X 1 X 2 dove X 0 = ε e X k = X k-1 X (operatore più prioritario) Per la concatenazione vale la proprietà associativa, ma non la proprietà commutativa. ESEMPIO X1 = {00, 11} X2 = {01, 10} ESPRESSIONI REGOLARI - ESEMPIO X1 + X2 = {00, 11, 01, 10} X1 X2 = {0001, 1101, 0010, 1110} X2 X1 = {0100, 0111, 1000, 1011} X1* = {ε, 00,11, 0000,0011,1100,1111, , , , , , , , , } ATTENZIONE: uno stesso linguaggio può essere descritto da molte espressioni regolari diverse! Prof. Enrico Denti Università di Bologna A.A. 2014/

51 ESPRESSIONI REGOLARI - ESEMPI Con riferimento a linguaggi: ε denota il linguaggio vuoto un elemento a A denota il linguaggio {a} R1+R2 denota l unione dei linguaggi denotati da R1 e R2 R1 R2 denota la concatenazione dei linguaggi denotati da R1 e R2 R* denota il risultato dell operatore di chiusura applicato al linguaggio denotato da R. ESEMPIO Alfabeto A = { 0, 1 } 0 + 1* = {0, ε, 1, 11, 111, 1111, 11111, } (0 + 1)* = {0+1, ε, (0+1)(0+1), (0+1)(0+1)(0+1), } = = {ε, 0, 1, 00,10,01,11, 000,010,001,011,100,110,101,111, } = A* (10 01)* = (1001)* = { ε, 1001, , , } ESPRESSIONI E LINGUAGGI REGOLARI TEOREMA: l'insieme dei linguaggi generati da grammatiche di tipo 3 (grammatiche regolari) coincide con l'insieme dei linguaggi descritti da espressioni regolari. Grammatiche regolari: produzioni lineari, della forma A a o A a B (a destra) oppure A a o A B a (a sinistra) con A,B VN, a VT* Per passare dalla grammatica all'espressione regolare si interpretano le produzioni come "equazioni" in cui i simboli terminali sono i termini noti, i linguaggi generati da ogni simbolo non terminale sono le incognite. Prof. Enrico Denti Università di Bologna A.A. 2014/

52 ESPRESSIONI vs LINGUAGGI REGOLARI Per passare dalla grammatica all'espressione regolare si interpretano le produzioni come "equazioni" in cui i simboli terminali sono i termini noti, i linguaggi generati da ogni simbolo non terminale sono le incognite. ESEMPIO: la grammatica lineare a destra vista in precedenza: S a a + S a S può essere letta come un'equazione con tre termini noti: a, +, - una incognita, L S che impone il vincolo (usiamo per l'unione il simbolo anziché +) L S = a (a + L S ) (a L S ) = (a + a ) L S a la cui soluzione è l'espressione regolare S = (a + a )* a SOLUZIONE DI EQUAZIONI SINTATTICHE In generale, esiste un algoritmo per risolvere le equazioni sintattiche derivate da grammatiche lineari e calcolare il corrispondente linguaggio regolare tale algoritmo esiste in due versioni distinte: per grammatiche lineari a destra per grammatiche lineari a sinistra Peraltro, le due versioni si distinguono solo per la trasformazione adottata in un singolo punto: perciò nel seguito illustreremo in dettaglio solo il primo. Prof. Enrico Denti Università di Bologna A.A. 2014/

53 ALGORITMO (grammatiche lineari a destra) 1. Riscrivere ogni gruppo di produzioni del tipo X α 1 α 2 α n come X = α 1 + α α n 2. Poiché la grammatica è lineare a destra, ogni α k ha la forma ux k dove X k VN ε, u VT* Ergo, si raccolgano a destra i simboli non-terminali dei vari α 1 α n scrivendo X = (u 1 + u 2 + ) X 1 (z 1 + z 2 + ) X n dove X k VN, u k, z k VT* Ciò porta a un sistema di M equazioni in M incognite dove M è la cardinalità dell'alfabeto VN (cioè il numero di simboli non terminali) 3. Eliminare dalle equazioni le ricorsioni dirette, data l'equivalenza X = u X δ X = (u)* δ Ognuna delle forme di frase δ conterrà altre incognite, ma non X. 4. Risolvere il sistema rispetto a S per eliminazioni successive (metodo di Gauss), eventualmente ri-applicando (2) e (3) per trasformare le equazioni via via ottenute. 5. La soluzione del sistema è il linguaggio regolare cercato. ALGORITMO (grammatiche lineari a sinistra) 1. Riscrivere ogni gruppo di produzioni del tipo X α 1 α 2 α n come X = α 1 + α α n 2. Poiché la grammatica è lineare a sinistra, ogni α k ha la forma X k u dove X k VN ε, u VT* Ergo, si raccolgano a sinistra i simboli non-terminali dei vari α 1 α n scrivendo X = X 1 (u 1 + u 2 + ) + + X n (z 1 + z 2 + ) dove X k VN, u k, z k VT* Ciò porta a un sistema di M equazioni in M incognite dove M è la cardinalità dell'alfabeto VN (cioè il numero di simboli non terminali) 3. Eliminare dalle equazioni le ricorsioni dirette, data l'equivalenza X = X u δ X = δ (u)* Ognuna delle forme di frase δ conterrà altre incognite, ma non X. 4. Risolvere il sistema rispetto a S per eliminazioni successive (metodo di Gauss), eventualmente ri-applicando (2) e (3) per trasformare le equazioni via via ottenute. 5. La soluzione del sistema è il linguaggio regolare cercato. Prof. Enrico Denti Università di Bologna A.A. 2014/

LINGUAGGI DI ALTO LIVELLO

LINGUAGGI DI ALTO LIVELLO LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware Linguaggi di alto livello AN - 1995 Linguaggi di alto livello AN - 1995 Evoluzione dei

Dettagli

LINGUAGGI DI ALTO LIVELLO

LINGUAGGI DI ALTO LIVELLO LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 Linguaggi di alto livello Barriera di astrazione C Fortran Modula-2 Cobol Basic Pascal

Dettagli

LINGUAGGI DI ALTO LIVELLO

LINGUAGGI DI ALTO LIVELLO LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 LINGUAGGI DI ALTO LIVELLO Barriera di astrazione C Fortran Modula-2 Cobol Algol Basic

Dettagli

Barriera di astrazione. Barriera di astrazione. macchina virtuale. non sono quelle della macchina hardware. Algol. Ada. Lisp. Lisp.

Barriera di astrazione. Barriera di astrazione. macchina virtuale. non sono quelle della macchina hardware. Algol. Ada. Lisp. Lisp. LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware LINGUAGGI DI ALTO LIVELLO Barriera di astrazione C Fortran Cobol Basic Pascal Python Modula-2

Dettagli

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 LINGUAGGI DI ALTO LIVELLO Barriera di astrazione Fortran Cobol Basic Pascal Python C

Dettagli

LINGUAGGI DI ALTO LIVELLO

LINGUAGGI DI ALTO LIVELLO LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 LINGUAGGI DI ALTO LIVELLO Barriera di astrazione C Fortran Modula-2 Cobol Algol Basic

Dettagli

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 Un po di storia sui linguaggi 1957 John Backus e colleghi della IBM rilasciano la prima

Dettagli

Pumping lemma per i linguaggi Context-free

Pumping lemma per i linguaggi Context-free Pumping lemma per i linguaggi Context-free Sia L un linguaggio context-free. E possibile determinare una costante k, dipendente da L, tale che qualunque stringa z! L con z > k si può esprimere come z=

Dettagli

Un po di storia sui linguaggi

Un po di storia sui linguaggi LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 Un po di storia sui linguaggi 1957 John Backus e colleghi della IBM rilasciano la prima

Dettagli

Backus Naur Form. Paolo Bison. Fondamenti di Informatica 1 A.A. 2004/05 Università di Padova. BNF, Paolo Bison, A.A ,

Backus Naur Form. Paolo Bison. Fondamenti di Informatica 1 A.A. 2004/05 Università di Padova. BNF, Paolo Bison, A.A , p.1/19 Backus Naur Form Paolo Bison Fondamenti di Informatica 1 A.A. 2004/05 Università di Padova Linguaggio di programmazione p.2/19 strumento linguistico per scrivere una sequenza di istruzioni (programma)

Dettagli

Linguaggi di Programmazione Corso C. Parte n.2 Introduzione ai Linguaggi Formali. Nicola Fanizzi

Linguaggi di Programmazione Corso C. Parte n.2 Introduzione ai Linguaggi Formali. Nicola Fanizzi Linguaggi di Programmazione Corso C Parte n.2 Introduzione ai Linguaggi Formali Nicola Fanizzi (fanizzi@di.uniba.it) Dipartimento di Informatica Università degli Studi di Bari Definizioni Preliminari Un

Dettagli

Definizione di Grammatica

Definizione di Grammatica Corso di Linguaggi e Traduttori 1 AA 2004-05 GRAMMATICHE 1 Definizione di Grammatica Formalmente definiamo un grammatica G mediante una quadrupla ( VN, VT, P, S ) dove: V N e l insieme dei simboli non

Dettagli

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware

LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 Un po di storia sui linguaggi 1957 John Backus e colleghi della IBM rilasciano la prima

Dettagli

Linguaggi di Programmazione dall assembler ai linguaggi di alto livello

Linguaggi di Programmazione dall assembler ai linguaggi di alto livello Linguaggi di Programmazione dall assembler ai linguaggi di alto livello LINGUAGGIO MACCHINA 0 READ 8 READ 9 LOADA 8 3 LOADB 9 4 MUL 5 STOREA 8 6 WRITE 8 7 HALT 8 DATO INTERO 9 DATO INTERO Rappresentazione

Dettagli

Corso di Linguaggi e Traduttori 1 AA GRAMMATICHE

Corso di Linguaggi e Traduttori 1 AA GRAMMATICHE Corso di Linguaggi e Traduttori 1 AA 2004-05 GRAMMATICHE 1 Definizione di Grammatica Formalmente definiamo un grammatica G mediante una quadrupla V, V, P S ( ) N T, dove: V N e l insieme dei simboli non

Dettagli

Fondamenti d Informatica: Grammatiche. Barbara Re, Phd

Fondamenti d Informatica: Grammatiche. Barbara Re, Phd Fondamenti d Informatica: Grammatiche Barbara Re, Phd Grammatiche } Con il termine grammatica s intende } Un formalismo che permette di definire un insieme di stringhe mediante l imposizione di un particolare

Dettagli

Proprietà dei linguaggi non contestuali

Proprietà dei linguaggi non contestuali Proprietà dei linguaggi non contestuali Argomenti della lezione Pumping lemma per i linguaggi non contestuali Proprietà di chiusura Argomenti della lezione Grammatiche non contestuali in forma ridotta

Dettagli

Linguaggi di Programmazione Corso C. Parte n.3 Linguaggi Liberi da Contesto e Linguaggi Contestuali. Nicola Fanizzi

Linguaggi di Programmazione Corso C. Parte n.3 Linguaggi Liberi da Contesto e Linguaggi Contestuali. Nicola Fanizzi Linguaggi di Programmazione Corso C Parte n.3 Linguaggi Liberi da Contesto e Linguaggi Contestuali Nicola Fanizzi (fanizzi@di.uniba.it) Dipartimento di Informatica Università degli Studi di Bari Grammatiche

Dettagli

Un po di storia sui linguaggi

Un po di storia sui linguaggi LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware 1 Un po di storia sui linguaggi 1957 John Backus e colleghi della IBM rilasciano la prima

Dettagli

ESERCITAZIONE II. Linguaggi Context Free

ESERCITAZIONE II. Linguaggi Context Free ESERCITAZIONE II Linguaggi Context Free 2 INTRODUZIONE LINGUAGGI CF I linguaggi di tipo 2 sono detti context free (CF) o non contestuali. Sono GENERATI da grammatiche di tipo 2. Dati: VN insieme dei simboli

Dettagli

LINGUAGGI CONTEXT FREE. Lezione Lezione

LINGUAGGI CONTEXT FREE. Lezione Lezione LINGUAGGI CONTEXT FREE Lezione 25-11-2010 Lezione 30-11-2010 2 INTRODUZIONE GERARCHIA DI CHOMSKY 3 4 DEFINIZIONE DEI LINGUAGGI CONTEXT FREE LINGUAGGI CF I linguaggi di tipo 2 sono detti context free (CF)

Dettagli

LINGUAGGI FORMALI. Introduzione

LINGUAGGI FORMALI. Introduzione LINUAI FORMALI Introduzione Alfabeto : un qualunque insieme di simboli. (Tratteremo solo alfabeti finiti). Esempio: {a,b,c,,,x,w,y,z} {0.1.2.3.4.5.6.7.8.9} {0,1} Stringa (su un alfabeto) : una sequenza

Dettagli

Linguaggi e Grammatiche Liberi da Contesto

Linguaggi e Grammatiche Liberi da Contesto N.Fanizzi-V.Carofiglio Dipartimento di Informatica Università degli Studi di Bari 22 aprile 2016 1 Linguaggi Liberi da Contesto 2 Grammatiche e Linguaggi Liberi da Contesto G = (X, V, S, P) è una grammatica

Dettagli

Programmazione. Dipartimento di Matematica. Ing. Cristiano Gregnanin. 29 febbraio Corso di laurea in Matematica

Programmazione. Dipartimento di Matematica. Ing. Cristiano Gregnanin. 29 febbraio Corso di laurea in Matematica Programmazione Dipartimento di Matematica Ing. Cristiano Gregnanin Corso di laurea in Matematica 29 febbraio 2016 1 / 28 Linguaggi 2 / 28 Linguaggi 3 / 28 Linguaggi di alto livello Si basano su una macchina

Dettagli

Parte n.4 Linguaggi: Gerarchia ed Operazioni

Parte n.4 Linguaggi: Gerarchia ed Operazioni Linguaggi di Programmazione Corso C Parte n.4 Linguaggi: Gerarchia ed Operazioni Nicola Fanizzi (fanizzi@di.uniba.it) Dipartimento di Informatica Università degli Studi di Bari Gerarchia di Chomsky Sia

Dettagli

Quiz sui linguaggi CF

Quiz sui linguaggi CF Fondamenti dell Informatica 1 semestre Quiz sui linguaggi CF Prof. Giorgio Gambosi a.a. 2018-2019 Problema 1: Si consideri la seguente grammatica context free G, dove S, NP, V P, P P, A sono i simboli

Dettagli

Linguaggi di alto livello. Barriera di astrazione. Pascal. Cobol. Fortran. Basic. Modula-2. Lisp. Simula67 Scheme. Smalltalk C++ Prolog AN

Linguaggi di alto livello. Barriera di astrazione. Pascal. Cobol. Fortran. Basic. Modula-2. Lisp. Simula67 Scheme. Smalltalk C++ Prolog AN Linguaggi di alto livello Barriera di astrazione C Fortran Modula-2 Cobol Basic Pascal Algol Ada Lisp Smalltalk Simula67 Scheme C++ Prolog ML AN - 1995 Linguaggi di alto livello IMPERATIVI Fortran Cobol

Dettagli

Quiz sui linguaggi CF

Quiz sui linguaggi CF Fondamenti dell Informatica 1 semestre Quiz sui linguaggi CF Prof. Giorgio Gambosi a.a. 2014-2015 Problema 1: Si consideri la seguente grammatica context free G, dove S, NP, V P, P P, A sono i simboli

Dettagli

Pumping lemma per i linguaggi Context-free

Pumping lemma per i linguaggi Context-free Pumping lemma per i linguaggi Context-free Sia L un linguaggio context-free. E possibile determinare una costante k, dipendente da L, tale che qualunque stringa z # L con z > k si può esprimere come z=

Dettagli

C++ Barriera di astrazione. Barriera di astrazione. Basic. Basic. Lisp. Lisp. Pascal. Prolog. Pascal. Prolog. Cobol. Fortran IMPERATIVI FUNZIONALI

C++ Barriera di astrazione. Barriera di astrazione. Basic. Basic. Lisp. Lisp. Pascal. Prolog. Pascal. Prolog. Cobol. Fortran IMPERATIVI FUNZIONALI Linguaggi di alto livello Barriera di astrazione C Fortran Cobol Modula-2 Basic Pascal Algol Ada Lisp Smalltalk Simula67 Scheme C++ Prolog ML AN - 1995 Linguaggi di alto livello IMPERATIVI C Fortran Modula-2

Dettagli

Grammatiche. Grammatiche libere da contesto Grammatiche regolari Potenza delle grammatiche libere e regolari Struttura di frase: Alberi di derivazione

Grammatiche. Grammatiche libere da contesto Grammatiche regolari Potenza delle grammatiche libere e regolari Struttura di frase: Alberi di derivazione Grammatiche Grammatiche libere da contesto Grammatiche regolari Potenza delle grammatiche libere e regolari Struttura di frase: Alberi di derivazione Esempio dei numeri interi Si consideri il linguaggio

Dettagli

GRAMMATICA FORMALE. Albero sintattico

GRAMMATICA FORMALE. Albero sintattico GRAMMATICA FORMALE Una quadrupla VT,VN,P,S dove: VT è un insieme finito di simboli terminali VN è un insieme finito di simboli non terminali Pè uninsieme finito di produzioni, ossiadi regole di riscrittura

Dettagli

LINGUAGGI DI ALTO LIVELLO

LINGUAGGI DI ALTO LIVELLO LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware Linguaggi di alto livello Barriera di astrazione C Fortran Modula-2 Cobol Algol Basic Ada

Dettagli

PROLOG E ANALISI SINTATTICA DEI LINGUAGGI PROLOG E ANALISI SINTATTICA DEI LINGUAGGI PROLOG E ANALISI SINTATTICA DEI LINGUAGGI ESEMPIO

PROLOG E ANALISI SINTATTICA DEI LINGUAGGI PROLOG E ANALISI SINTATTICA DEI LINGUAGGI PROLOG E ANALISI SINTATTICA DEI LINGUAGGI ESEMPIO PROLOG E ANALISI SINTATTICA DEI LINGUAGGI Quando si vuole definire in modo preciso la sintassi di un linguaggio si ricorre a una grammatica Una grammatica permette di stabilire se una sequenza di simboli

Dettagli

Linguaggi e Traduttori: Analisi sintattica

Linguaggi e Traduttori: Analisi sintattica Linguaggi e Traduttori: Analisi sintattica Armando Tacchella Sistemi e Tecnologie per il Ragionamento Automatico (STAR-Lab) Dipartimento di Informatica Sistemistica e Telematica (DIST) Università di Genova

Dettagli

Espressività e limitazioni delle grammatiche regolari

Espressività e limitazioni delle grammatiche regolari Espressività e limitazioni delle grammatiche regolari Vantaggi: Le grammatiche regolari consentono di esprimere una significativa classe di linguaggi: linguaggi con un numero di sequenze infinito grazie

Dettagli

Sui Linguaggi Regolari: Teorema di Kleene - Pumping Lemm

Sui Linguaggi Regolari: Teorema di Kleene - Pumping Lemm Sui Linguaggi Regolari: Teorema di Kleene - Pumping Lemma N.Fanizzi - V.Carofiglio 6 aprile 2016 1 Teorema di Kleene 2 3 o 1 o 3 o 8 Teorema di Kleene Vale la seguente equivalenza: L 3 L FSL L REG Dimostrazione.

Dettagli

Proprietà di CFL. C. Bodei Fondamenti di Programmazione a.a. 17/18

Proprietà di CFL. C. Bodei Fondamenti di Programmazione a.a. 17/18 Proprietà di CFL Pumping Lemma per CFL: simile ai linguaggi regolari. Proprietà di chiusura: alcune delle proprietà di chiusura dei linguaggi regolari valgono anche per i CFL. Proprietà di decisione: possiamo

Dettagli

Dall algoritmo al calcolatore: concetti introduttivi. Fondamenti di Programmazione

Dall algoritmo al calcolatore: concetti introduttivi. Fondamenti di Programmazione Dall algoritmo al calcolatore: concetti introduttivi Fondamenti di Programmazione Algoritmo Problema o compito Preparazione di una torta Programmazione del VCR MCD tra due numeri Algoritmo sequenza precisa

Dettagli

PROLOG E ANALISI SINTATTICA DEI LINGUAGGI Quando si vuole definire in modo preciso la sintassi di un linguaggio si ricorre a una grammatica G=(V n,v t

PROLOG E ANALISI SINTATTICA DEI LINGUAGGI Quando si vuole definire in modo preciso la sintassi di un linguaggio si ricorre a una grammatica G=(V n,v t PROLOG E ANALISI SINTATTICA DEI LINGUAGGI Quando si vuole definire in modo preciso la sintassi di un linguaggio si ricorre a una grammatica Una grammatica permette di stabilire se una sequenza di simboli

Dettagli

Forme Normali. Forma normale di Chomsky. E caratterizzata da regole di due tipi. A! BC dove A, B, C $ V N A! a con a $ V T. Forma normale di Greibach

Forme Normali. Forma normale di Chomsky. E caratterizzata da regole di due tipi. A! BC dove A, B, C $ V N A! a con a $ V T. Forma normale di Greibach Forme Normali A partire da una grammatica Context-free G è sempre possibile costruire una grammatica equivalente G ovvero L(G) = L(G ) che abbiano le produzioni in forme particolari, dette forme normali.

Dettagli

Grammatiche libere da contesto. Grammatiche libere da contesto

Grammatiche libere da contesto. Grammatiche libere da contesto rammatiche e Linguaggi Liberi da Contesto Abbiamo visto che molti linguaggi non sono regolari. Consideriamo allora classi piu grandi di linguaggi Linguaggi Liberi da Contesto (CFL) sono stati usati nello

Dettagli

Le grammatiche formali

Le grammatiche formali Le grammatiche formali Il carattere generativo dei sistemi linguisticii i Consideriamo i la seguente frase: Un gatto rincorre il topo Non facciamo difficoltà a riconoscere che si tratta di una frase sintatticamente

Dettagli

Linguaggio Formale 2

Linguaggio Formale 2 Linguaggio Formale 2 Ex: Per generare il linguaggio L(G 1 ) = {a n b n c n } si può usare la grammatica G 1 = < {A,B,C}, {a,b,c}, P, A > Con regole di produzione P: 1. A abc 2. A abbc 3. Bb bb 4. Bc Cbcc

Dettagli

Linguaggi e grammatiche

Linguaggi e grammatiche Linguaggi e grammatiche Corso di Fondamenti di Informatica - 1 modulo Corso di Laurea in Informatica Università di Roma Tor Vergata a.a. 2017-2018 Prof. Giorgio Gambosi Alfabeti e linguaggi Alfabeto Un

Dettagli

Corso di Linguaggi di Programmazione + Laboratorio Docente: Marco de Gemmis

Corso di Linguaggi di Programmazione + Laboratorio Docente: Marco de Gemmis Corso di Linguaggi di Programmazione + Laboratorio Docente: Marco de Gemmis Capitolo 2 Grammatiche e Linguaggi Si ringraziano il Prof. Giovanni Semeraro e il Dott. Pasquale Lops per la concessione del

Dettagli

Linguaggi. Che cos è un linguaggio di programmazione? Aspetti da studiare e comprendere per poter scrivere programmi:

Linguaggi. Che cos è un linguaggio di programmazione? Aspetti da studiare e comprendere per poter scrivere programmi: Linguaggi Che cos è un linguaggio di programmazione? Aspetti da studiare e comprendere per poter scrivere programmi: Sintassi: forma delle frasi, correttezza sintattica Semantica: significato delle frasi,

Dettagli

Parte n.7 Automi a Pila e Grammatiche Libere

Parte n.7 Automi a Pila e Grammatiche Libere Linguaggi di Programmazione Corso C Parte n.7 Automi a Pila e Grammatiche Libere Nicola Fanizzi (fanizzi@di.uniba.it) Dipartimento di Informatica Università degli Studi di Bari Automi a Pila Per il teorema

Dettagli

Grammatiche libere da contesto. Grammatiche libere da contesto

Grammatiche libere da contesto. Grammatiche libere da contesto rammatiche e Linguaggi Liberi da Contesto Abbiamo visto che molti linguaggi non sono regolari. Consideriamo allora classi piu grandi di linguaggi. Linguaggi Liberi da Contesto (CFL) sono stati usati nello

Dettagli

Linguaggi formali e compilazione

Linguaggi formali e compilazione Linguaggi formali e compilazione Corso di Laurea in Informatica A.A. 2014/2015 Linguaggi formali e compilazione quivalenza di grammatiche In Informatica (e non solo, naturalmente) esistono sempre molti

Dettagli

Linguaggi di Programmazione Corso C. Parte n.6 Linguaggi Regolari ed Espressioni Regolari. Nicola Fanizzi

Linguaggi di Programmazione Corso C. Parte n.6 Linguaggi Regolari ed Espressioni Regolari. Nicola Fanizzi Linguaggi di Programmazione Corso C Parte n.6 Linguaggi Regolari ed Espressioni Regolari Nicola Fanizzi (fanizzi@di.uniba.it) Dipartimento di Informatica Università degli Studi di Bari Linguaggi Regolari

Dettagli

Programmazione II. Lezione 3. Daniele Sgandurra 26/10/2010.

Programmazione II. Lezione 3. Daniele Sgandurra 26/10/2010. Programmazione II Lezione 3 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 26/10/2010 1/35 Programmazione II Lezione 3 26/10/2010 Sommario 1 2 Semantica 2/35 Programmazione II Lezione 3 26/10/2010 Parte

Dettagli

Fondamenti d Informatica: linguaggi formali. Barbara Re, Phd

Fondamenti d Informatica: linguaggi formali. Barbara Re, Phd Fondamenti d Informatica: linguaggi formali Barbara Re, Phd Agenda } Introdurremo } La nozione di linguaggio } Strumenti per definire un linguaggio } Espressioni Regolari 2 Linguaggio } Da un punto di

Dettagli

Proprieta dei linguaggi liberi da contesto. Proprieta dei linguaggi liberi da contesto

Proprieta dei linguaggi liberi da contesto. Proprieta dei linguaggi liberi da contesto roprieta di CFL Semplificazione di una CFG: se un linguaggio e un CFL, ha una grammatica di una forma speciale. Pumping Lemma per CFL: simile ai linguaggi regolari. Proprieta di chiusura: alcune delle

Dettagli

GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONE. Cosimo Laneve

GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONE. Cosimo Laneve GRAMMATICHE DEI LINGUAGGI DI PROGRAMMAZIONE Cosimo Laneve 1 argomenti 1. linguaggi di programmazione 2. definizione formale di insiemi infiniti 3. la grammatica e la notazione BNF 4. notazioni alternative

Dettagli

Sintassi. Linguaggi. 4: Sintassi. Claudio Sacerdoti Coen. Universitá di Bologna 24/02/2011. Claudio Sacerdoti Coen

Sintassi. Linguaggi. 4: Sintassi. Claudio Sacerdoti Coen. Universitá di Bologna 24/02/2011. Claudio Sacerdoti Coen Linguaggi 4: Universitá di Bologna 24/02/2011 Outline 1 Wikipedia: La sintassi è la branca della linguistica che studia i diversi modi in cui le parole si uniscono tra loro per formare

Dettagli

Forma Normale di Chomsky

Forma Normale di Chomsky 2. Eliminazione delle produzioni unitarie Forma Normale di Chomsky Una produzione si dice unitaria se è della forma A! B. Le produzioni unitarie in pratica consistono in una ridenominazione di variabili,

Dettagli

Automi a pila. Dipartimento di Elettronica e Informazione Politecnico di Milano. 17 marzo 2017

Automi a pila. Dipartimento di Elettronica e Informazione Politecnico di Milano. 17 marzo 2017 Automi a pila Dipartimento di Elettronica e Informazione Politecnico di Milano 17 marzo 2017 Aumentiamo la potenza di un FSA Descrizione operativa dei limiti Un FSA ha un Organo di Controllo (OC) con memoria

Dettagli

Dall algoritmo al calcolatore: concetti introduttivi. Algoritmo. Problema: consumo medio 9/27/2018. Fondamenti di Programmazione 3

Dall algoritmo al calcolatore: concetti introduttivi. Algoritmo. Problema: consumo medio 9/27/2018. Fondamenti di Programmazione 3 Dall algoritmo al calcolatore: concetti introduttivi Fondamenti di Programmazione Algoritmo Problema o compito Preparazione di una torta Programmazione del VCR MCD tra due numeri Algoritmo sequenza precisa

Dettagli

(1) Linguaggio L = insieme di stringhe, sequenze finite di elementi del vocabolario

(1) Linguaggio L = insieme di stringhe, sequenze finite di elementi del vocabolario Luigi Rizzi Linguistica computazionale I. Elementi di base sulle grammatiche formali (1) Linguaggio L = insieme di stringhe, sequenze finite di elementi del vocabolario (2) Dato un vocabolario A, l insieme

Dettagli

Programmazione Teoria dei linguaggi formali

Programmazione Teoria dei linguaggi formali Programmazione Teoria dei linguaggi formali Rosario Culmone rosario.culmone@unicam.it 18/11/2009 UNICAM - p. 1/42 Linguaggi Definizione di grammatica di Chomsky Derivazione di stringhe e generazione di

Dettagli

Esercizi di Informatica Teorica

Esercizi di Informatica Teorica Esercizi di Informatica Teorica Linguaggi non contestuali: proprietàe forme normali 1 Grammatiche non contestuali richiami grammatica non contestuale (CFG o tipo 2): A β con A V N, β (V T V N )+ osservazione:

Dettagli

Sommario Linguaggi, messaggi e comunicazione. Introduzione ai Linguaggi di Programmazione. Linguaggio (1) Linguaggio (2)

Sommario Linguaggi, messaggi e comunicazione. Introduzione ai Linguaggi di Programmazione. Linguaggio (1) Linguaggio (2) Sommario Linguaggi, messaggi e comunicazione Traduzione di programmi Interpreti e compilatori Introduzione al processo di compilazione 1 2 Linguaggio (1) Linguaggio (2) Insieme di sequenze di simboli,

Dettagli

Informatica e Laboratorio di Programmazione Automi Alberto Ferrari. Alberto Ferrari Informatica e Laboratorio di Programmazione

Informatica e Laboratorio di Programmazione Automi Alberto Ferrari. Alberto Ferrari Informatica e Laboratorio di Programmazione Informatica e Laboratorio di Programmazione Automi Alberto Ferrari Alberto Ferrari Informatica e Laboratorio di Programmazione automa o automa: macchina astratta o realizza un certo algoritmo, secondo

Dettagli

Linguaggi di Programmazione

Linguaggi di Programmazione Linguaggi di Programmazione 1 Linguaggio naturale e linguaggio macchina La comunicazione uomo-macchina avviene attraverso formalismi che assumono la forma di un linguaggio. Caratteristiche del Linguaggio

Dettagli

Unità Didattica 2 I Linguaggi di Programmazione

Unità Didattica 2 I Linguaggi di Programmazione Unità Didattica 2 I Linguaggi di Programmazione 1 Linguaggio naturale e linguaggio macchina La comunicazione uomo-macchina avviene attraverso formalismi che assumono la forma di un linguaggio. Caratteristiche

Dettagli

Grammatiche Parse trees Lezione del 17/10/2012

Grammatiche Parse trees Lezione del 17/10/2012 Fondamenti di Programmazione A.A. 2012-2013 Grammatiche Parse trees Lezione del 17/10/2012 AUTILI MARCO http://www.di.univaq.it/marco.autili/ Riassunto lezione precedente Sintassi vs Semantica Stringhe,

Dettagli

Nozioni Preliminari e Terminologia. Alfabeti Stringhe Linguaggi

Nozioni Preliminari e Terminologia. Alfabeti Stringhe Linguaggi Nozioni Preliminari e Terminologia Alfabeti Stringhe Linguaggi Insiemi Def. Un insieme è una collezione non ordinata di oggetti o elementi Gli insiemi sono scritti tra { } Gli elementi sono inseriti tra

Dettagli

9 Calcolo dei sequenti LC p

9 Calcolo dei sequenti LC p 9 Calcolo dei sequenti LC p In questa sezione mostriamo un metodo più elegante, semplice e soprattutto AUTOMATICO per mostrare se una proposizione è valida o meno e soddisfacibile o meno. Tale metodo è

Dettagli

Linguaggi, messaggi e comunicazione Traduzione di programmi Interpreti e compilatori Introduzione al processo di compilazione

Linguaggi, messaggi e comunicazione Traduzione di programmi Interpreti e compilatori Introduzione al processo di compilazione Sommario Linguaggi, messaggi e comunicazione Traduzione di programmi Interpreti e compilatori Introduzione al processo di compilazione 1 2 Linguaggio (1) Linguaggio (2) Insieme di sequenze di simboli,

Dettagli

a cura di Luca Cabibbo e Walter Didimo

a cura di Luca Cabibbo e Walter Didimo a cura di Luca Cabibbo e Walter Didimo Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 1 proprietà delle grammatiche non contestuali pumping lemma forme normali notazioni sul livello degli

Dettagli

Corso di Programmazione Linguaggi di Programmazione

Corso di Programmazione Linguaggi di Programmazione Corso di Programmazione Linguaggi di Programmazione Dott. Stefano Ferilli ferilli@di.uniba.it Università degli Studi di Bari Dipartimento di Informatica Linguaggio Insieme di sequenze di simboli appartenenti

Dettagli

acuradi Luca Cabibbo e Walter Didimo Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 1

acuradi Luca Cabibbo e Walter Didimo Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 1 acuradi Luca Cabibbo e Walter Didimo Esercizi di Informatica teorica - Luca Cabibbo e Walter Didimo 1 richiami teorici sulle grammatiche di Chomsky esercizivari esercizi su grammatiche ed espressioni regolari

Dettagli

Informatica Teorica. linguaggi non contestuali

Informatica Teorica. linguaggi non contestuali Informatica Teorica linguaggi non contestuali di tipo 2 context free (CF) 1 linguaggi non contestuali molte frasi in linguaggio naturale hanno una struttura sintattica non contestuale esempio: soggetto

Dettagli

Linguaggi Liberi dal Contesto. Linguaggi Liberi dal Contesto

Linguaggi Liberi dal Contesto. Linguaggi Liberi dal Contesto rammatiche e Linguaggi Liberi da Contesto Abbiamo visto che molti linguaggi non sono regolari. Consideriamo allora una classe piu ampia di linguaggi, i Linguaggi Liberi da Contesto (CFL) i CFL sono stati

Dettagli

Grammatiche context-free

Grammatiche context-free Corso di Laurea Magistrale in Ingegneria Informatica A.A. 2013-2014 Linguaggi Formali e Compilatori Grammatiche context-free Giacomo PISCITELLI Politecnico di Bari G. Piscitelli pag. 1 di 28 Grammatiche

Dettagli

Università degli studi Roma Tre. linguaggio Java. A cura di A. Orlandini. Linguaggi: Sintassi e Semantica - Il. Il linguaggio Java

Università degli studi Roma Tre. linguaggio Java. A cura di A. Orlandini. Linguaggi: Sintassi e Semantica - Il. Il linguaggio Java Università degli studi Roma Tre Linguaggi: Sintassi e Semantica Il A cura di A. Orlandini 1 Obiettivi Distinguere la sintassi dalla semantica di un linguaggio Conoscere le convenzioni del meta-linguaggio

Dettagli

Cenni di programmazione ricorsiva. Appunti per gli studenti di Programmazione I e Laboratorio (corsi A-B)

Cenni di programmazione ricorsiva. Appunti per gli studenti di Programmazione I e Laboratorio (corsi A-B) Cenni di programmazione ricorsiva Appunti per gli studenti di Programmazione I e Laboratorio (corsi A-B) Corso di Laurea in Informatica Università di Pisa A.A. 2009/10 R. Barbuti, P. Mancarella Indice

Dettagli

Sommario Linguaggi, messaggi e comunicazione. Introduzione ai Linguaggi di Programmazione. Linguaggio. Messaggio

Sommario Linguaggi, messaggi e comunicazione. Introduzione ai Linguaggi di Programmazione. Linguaggio. Messaggio Sommario Linguaggi, messaggi e comunicazione Traduzione di programmi Interpreti e compilatori Introduzione al processo di compilazione 1 2 Linguaggio Messaggio Insieme di sequenze di simboli, le parole,

Dettagli

Definire tramite una grammatica ad attributi il

Definire tramite una grammatica ad attributi il 1 ESERCIZI ESERCIZIO 1 Definire tramite una grammatica ad attributi il linguaggio L = {a n b n c n n 0} Implementare un analizzatore sintattico/ semantico a discesa ricorsiva Costruire le tabelle di analisi

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 09 Linguaggi Sintassi e Semantica Alfonso Miola Ottobre 2009 http://www.dia.uniroma3.it/~java/fondinf/ Linguaggi - Sintassi e Semantica

Dettagli

Supplemento alle dispense di Sintassi

Supplemento alle dispense di Sintassi Supplemento alle dispense di Sintassi Luca Tesei 20 ottobre 2002 1 Formalizzazione Lo scopo di questa sezione è quello di presentare in maniera formale e precisa le nozioni di Automa e di Grammatica Libera

Dettagli

Definizione: Due equazioni si dicono equivalenti se ammettono le stesse soluzioni.

Definizione: Due equazioni si dicono equivalenti se ammettono le stesse soluzioni. Facoltà di Medicina e Chirurgia Corso Zero di Matematica Gruppi: MC-MF3 / PS-MF3 II Lezione EQUAZIONI E SISTEMI Dr. E. Modica erasmo@galois.it www.galois.it IDENTITÀ ED EQUAZIONI Si consideri un uguaglianza

Dettagli

Espressioni Regolari

Espressioni Regolari Espressioni Regolari Le espressioni regolari sono costituite dalle stringhe sull alfabeto Σ = Σ {+,,*,(,),φ} ottenute secondo le seguenti regole: 1. φ e ciascun membro di Σ sono Epressioni Regolari 2.

Dettagli

Proprieta dei linguaggi liberi da contesto. Proprieta dei linguaggi liberi da contesto

Proprieta dei linguaggi liberi da contesto. Proprieta dei linguaggi liberi da contesto roprieta di CFL Semplificazione di una CFG: se un linguaggio e un CFL, ha una grammatica di una forma speciale. Pumping Lemma per CFL: simile ai linguaggi regolari. Proprieta di chiusura: alcune delle

Dettagli

LA SINTASSI DEI LINGUAGGI DI PROGRAMMAZIONE. Ivan Lanese

LA SINTASSI DEI LINGUAGGI DI PROGRAMMAZIONE. Ivan Lanese LA SINTASSI DEI LINGUAGGI DI PROGRAMMAZIONE Ivan Lanese argomenti Grammatiche BNF Varianti: BNF + ε EBNF Remind: cos è una grammatica Una grammatica è uno strumento linguistico per definire insiemi di

Dettagli

Linguaggi di Programmazione

Linguaggi di Programmazione Linguaggi di Programmazione Lezione 4 Chiara Braghin braghin@dti.unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 6 Marzo 2007 Regole della grammatica di un linguaggio

Dettagli

Concetti di base sugli automi e sui linguaggi formali

Concetti di base sugli automi e sui linguaggi formali Concetti di base sugli automi e sui linguaggi formali Andrea Burattin 18 marzo 2005 Sommario Piccolo insieme di concetti sul funzionamento degli automi (a stati finiti, a pila,...), delle grammatiche libere

Dettagli

Verificare se una grammatica e LL(1) e costruirne la tabella di parsing. Verificare se una grammatica e LR(0) e costruirne la tabele ACTION e GOTO

Verificare se una grammatica e LL(1) e costruirne la tabella di parsing. Verificare se una grammatica e LR(0) e costruirne la tabele ACTION e GOTO ANALISI SINTATTICA TIPO 1: Data un linguaggio scrivere una grammatica che lo generi TIPO 2: Verificare se una grammatica non contestuale è ambigua TiPO 3: Verificare se una grammatica e LL(1) e costruirne

Dettagli

Corso di Programmazione Linguaggi di Programmazione. Linguaggio. Messaggio

Corso di Programmazione Linguaggi di Programmazione. Linguaggio. Messaggio Materiale didattico preparato dal dott. Stefano Ferilli Corso di Programmazione Linguaggi di Programmazione Dott. Pasquale Lops lops@di.uniba.it Università degli Studi di Bari Dipartimento di Informatica

Dettagli

7. Automi a Pila e Grammatiche Libere

7. Automi a Pila e Grammatiche Libere (fanizzi@di.uniba.it) Dipartimento di Informatica Università degli Studi di Bari 20 aprile 2016 1 Automi a Pila Definizione Descrizioni Istantanee Condizioni di Accettazione per PDA Esempi 2 Teorema delle

Dettagli