Pumping lemma per i linguaggi Context-free
|
|
|
- Agnese Piva
- 9 anni fa
- Просмотров:
Транскрипт
1 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= u v w x y in cui: 1. v w x! k 2. v + x > 0 3. u v i w x i y! L per i " 0 Es1: mostrare che il linguaggio L = {a n b n c n con n " 0 } non è context-free Es2: mostrare che il linguaggio L = {a m2 m " 1 } non è context-free
2 Pumping lemma per i linguaggi Context-free Per la dimostrazione del Pumping Lemma si fa uso delle grammatiche in forma normale di Chomsky, per le grammatiche in tale forma si ha che ogni nodo interno ha due figli, ad esclusione di quelli che hanno foglie come sottoalberi. Lemma - Sia w una stringa terminale prodotta dall albero sintattico se h è l altezza dell albero si ha che w! 2 h-1 Si consideri ora una grammatica G = < VN,VT,P, S > tale che L(G) = L-{#} e sia m = VN, si sceglie k= 2 m e quindi per le condizioni poste dal pumping lemma la stringa z sarà lunga almeno k. Per il lemma precedente un albero sintattico il cui cammino più lungo sia di lunghezza m, o meno, ha un prodotto di lunghezza 2 m-1 = k/2 o meno. Un tale albero sintattico non può quindi produrre la stringa z, cioé ogni albero sintattico che produce z deve essere di altezza almeno pari a m+1. Ora, essendo m = V N, si ha che nel percorso dalla radice alle foglie ci saranno almeno due simboli non terminali uguali (per il principio della piccionaia). Supponiamo che A = Ai = Aj
3 Pumping lemma per i linguaggi Context-free L albero di derivazione avrà la seguente struttura dove ciascun triangolo rappresenta il sottoalbero generante le varie parti della stringa. Essendo che A = A i = A j possiamo costruire altri alberi sintattici tramite sostituzione a partire dall albero originale. A A S A S A S A u v w x y z u v A x y w v w x u x albero di derivazione per la stringa uv 2 wx 2 y albero di derivazione per la stringa uwy
4 Proprietà di chiusura dei linguaggi Context-free Teorema: I linguaggi context-free non sono chiusi rispetto all intersezione e alla complementazione Intersezione considerato che i due linguaggi L 1 = {a n b n c m n,m" 0} e L 2 = {a m b n c n n,m" 0} sono context free, il linguaggio intersezione è costituito da {a n b n c n n,m" 0} che sappiamo non essere contextfree. Complementazione Se L 1 e L 2 sono context free allora anche L = L dovrebbe essere context free in virtù 1 # L 2 dei risultati sulla unione, ma siccome per la legge di De Morgan L= L 1 " L 2 questo equivarrebbe a dire che i linguaggi context-free sono chiusi rispetto all intersezione, contrariamente a quanto detto prima. Tuttavia L intersezione di un linguaggio Context-free ed un linguaggio regolare è ancora un linguaggio context-free
5 Determinismo e linguaggi context-free Un automa a pila è in genere non deterministico. Il non determinismo viene espresso da una o entrambe delle seguenti condizioni: 1. esistono più transizioni del tipo che iniziano con (q, a, A) 2. (q,a,a) e (q,$,a) sono entrambe definite, cioè l automa può scegliere di leggere il simbolo a $ oppure di non leggere niente. A differenza del caso delle grammatiche regolari in cui il non determinismo non aggiungeva potere computazionale all automa riconoscitore. L automa a Pila non deterministico è computazionalmente più potente dell automa deterministico. Ciò in virtù del seguente Teorema: Teorema: La famiglia dei linguaggi riconosciuta dagli automi a pila deterministici è contenuta strettamente in quella dei linguaggi context- free. Per dimostrarlo basta considerare la classe dei linguaggi inerentemente ambigui (cioé ogni grammatica equivalente è ambigua) per cui necessariamente l automa riconoscitore è non deterministico. Es. L = {a n b n c* n "0 } # {a* b n c n n "0 } è un linguaggio Context free inerentemente ambiguo e quindi non riconoscibile da un automa a pila deterministico
6 Determinismo e linguaggi context-free Si dimostra anche che esistono linguaggi non ambigui che sono non deterministici Es1: L = L # L = {a n b n n "1 } # {a n b 2n n "1} è non deterministico intuitivamente l automa dovrebbe collocare nella pila i primi n caratteri a e cominciare a disimpilare un a appena trova il primo b se la stringa! L, mentre se la stringa! L sono due i b che devono essere letti prima di disimpilare un a. Es2: il linguaggio L = {w w R } è non deterministico.
7 Proprietà di chiusura dei linguaggi deterministici La classe dei linguaggi deterministici è chiusa rispetto alla complementazione. La classe dei linguaggi deterministici non è chiusa rispetto all unione l esempio 1 della precedente slide $$ L = L # L = {a n b n n "1 } # {a n b 2n n "1} ne è un esempio, infatti a partire da due linguaggi deterministici si costruisce con la loro unione un linguaggio non deterministico. La classe dei linguaggi deterministici non è chiusa rispetto all intersezione. Es: L = L 1 " L 2 = {a n b n c* n "0 } " {a* b n c n n "0 } = {a n b n c n n "0 } dove L 1, L 2 sono certamente linguaggi deterministici
8 Analisi sintattica Obiettivi! verificare la correttezza sintattica del programma dato in ingresso! costruire l albero sintattico Strategie! top down (discendente), si parte dal simbolo distinto e si cerca di applicare in qualche! ordine le produzioni in modo da verificare se la stringa x è generabile dalla grammatica. Cioé!!! S!* x! Bottom-up, si parte dalla stringa x, si cerca una sottostringa che sia parte destra di una!! produzione e la si sostituisce con la corrispondente parte sinistra. Questa operazione viene denominata di Riduzione e viene iterata fino a quando la stringa non si riduce al simbolo distinto S.
9 Un cenno sui riconoscitori top-down Un riconoscitore sintattico top-down basato su grammatiche LL(k) implementa un automa a pila push-down che attua un riconoscimento per pila vuota. In genere gli automi che vengono impiegati fanno riferimento all uso di una marca di fine stringa $. Per ottenere il determinismo si sfrutta la conoscenza che proviene dall avere sotto considerazione la stringa in ingresso. In caso di indecisione di quale transizione attuare si considerano i prossimi k simboli che l automa dovrà leggere per prendere le opportune decisioni.
10 Derivazioni Canoniche E! E + T E - T -T T T! T * F F! F! (E) i E "* a + b*c? Derivazione canonica sinistra [sostituzione del primo simbolo non terminale a sinistra] E" E +T "T + T " F + T" i + T" i + T*F " i + F*F "i+ i*f " i +i*i Derivazione canonica a destra [sostituzione del primo simbolo non terminale a destra] E " E + T" E + T*F " E +T*i " E + F*i " E + i*i "T + i*i " F + i*i" i + i*i E E + T Albero sintattico risultante T F T * F i F i i c a b
11 Grammatiche LL(k) Per costruire riconoscitori deterministici occorre agire sulle grammatiche in due direzioni: 1. Porre dei vincoli alla grammatica sì da renderla adatta all analisi top-down. 2. Utilizzare l informazione fornita dai simboli successivi alla parte già riconosciuta per guidare l analizzatore nella scelta della parte destra con cui espandere il simbolo non terminale corrente. Grammatiche LL(K) L - indica che la stringa in ingresso è esaminata da sinistra (Left) verso destra. L - indica che viene costruita la derivazione canonica a sinistra (Left). K - indica il numero di simboli di lookahead che l analizzatore considera per scegliere la parte! destra con cui espandere il simbolo non terminale corrente.
12 Regole euristiche L approccio di traguardare un certo numero di simboli per prendere una decisione in merito alla sostituzione della parte destra impone una trasformazione della grammatica mediante regole euristiche. 1. Fattorizzazione sinistra per far sì che non si abbia un prefisso comune in due o più parti destre! di regole associate allo stesso simbolo non terminale. A! y v y w A! y A A! v w 2. Eliminazione della ricorsione sinistra per evitare la generazione di cicli infiniti di! generazione all applicazione della derivazione canonica a sinistra! E " E + T " E + T +T " E + T + T + T "...
13 Eliminazione della ricorsione sinistra E! E + T E - T -T T T! T * F F! F! (E) i Una regola del tipo Y! Yx implica necessariamente l esistenza di una regola Y!v dove Y non è un prefisso di v. Ciò per far sì che il linguaggio generato sia non vuoto. si ha allora: Y! Yx! Y! v Y! v Y Y! x Y Y! # E facile vedere come i due schemi generino lo stesso linguaggio Y " Yx "Y x x" Y x x x " v x x x Y " vy "v x Y " v x x Y " v x x x
14 Esempio Nella grammatica vista in precedenza esistono tre regole ricorsive a sinistra. Si ha perciò E! E + T! E! T!!!!!! T! T * F!!! T! F!!!!!!!E! T E!E! + T E! E! #! T! F T T! * F T! T! #! E! - T E E! - T E E!! E -T! E!!! -T! E! #!!!!!! pertanto:!! E!!! E + T E - T -T T T! T * F F! F! (E) i!! E! T E - T E E! + T E - T E #! T! F T! T! *F T # F! (E) i Si osservi come la ricorsione sinistra sia stata cambiata in ricorsione destra
15 Grammatiche LL(1) Una grammatica si dice LL(1) se la scelta per quale simbolo non terminale da espandere dipende unicamente dal prossimo simbolo della stringa da riconoscere. Per ricavare informazioni collegate ai simboli terminali che saranno presenti nelle stringhe si opera una sorta di preprocessing della grammatica calcolando una volta per tutte le informazioni necessarie. Lo scopo di questo preprocessing è quello di ricavare due insiemi di simboli terminali denominati FIRST e FOLLOW, costruite nel seguente modo. 1. Costruzione dell insieme dei FIRST - data una generica stringa X $ V* l insieme FIRST (X)! comprende tutti i simboli terminali che sono prefissi di una qualsiasi stringa derivabile da X.!! FIRST (X) = { t t $ V T e X "* t v con v $ V*} 2. Costruzione dell insieme dei FOLLOW - dato un simbolo non terminale Y l insieme dei! FOLLOW (Y) comprende tutti i simboli terminali che possono seguire immediatamente Y! FOLLOW(Y) = { t t $ V T e S" + u Y t v con u, v $ V* }
16 Definizione dell insieme dei FIRST 1. Se t! V T allora FIRST (t) = {t} 2. Se X! V N allora FIRST (X) = { t t! VT, X " + t u, con u! V* }! per cui se siamo in presenza della regola X # x 1 x 2... x n! il FIRST di X è definito come FIRST (X) = $ 1 n FIRST (xi ) 3. Se y = y 1 y 2,...,y n con y i! V (a) Se y % allora FIRST (y) = FIRST (y 1 " + ) 1 (b) Se y i " + % con i = 1,2,...k < n e y k+1 % allora FIRST (y) = $ k+1 " + 1 FIRST (yi ) (c) Se y i " + % con i= 1,...,n allora FIRST (y) = $ n 1 FIRST (yi )
17 Costruzione dell insieme dei FIRST!E! T E - T E E! + T E - T E #!T! F T T! *F T # F! (E) i L insieme dei FIRST (X) comprende tutti i simboli terminali che siano prefissi in una stringa qualsiasi che sia derivabile da X. si ha: FIRST (E) = {-, (, i }! FIRST (E ) = {+, -} FIRST (T) = { (, i } FIRST (T ) = { * } FIRST (F) = { (, i } per esempio E " - T E E " T E " F T E " ( E ) T E E " T E " F T E " i T E
18 Costruzione dell insieme dei FIRST cont. Si costruisce un grafo i cui nodi sono rappresentati da tutti i simboli terminali e non terminali della grammatica Sia X, Y, W $ VN t $ VT u, v $ V* gli archi del grafo sono costruiti secondo le seguenti due regole R1 - per ogni regola della grammatica avente la struttura X! t u % si traccia l arco X! t R2 - per ogni regola della grammatica avente la struttura X! Y u % si traccia l arco X! Y R1 R1 E - E T F R2 R2 R1 R1 ( i T ) R1 R1 + - * FIRST (E) = { -, (, i }! FIRST (E ) = { +, - } FIRST (T) = { (, i } FIRST (T ) = { * } FIRST (F) = { (, i } E! T E - T E E! + T E - T E #!T! F T T! *F T # F! (E) i Ogni nodo relativo ad un simbolo terminale raggiungibile tramite un cammino a partire da un simbolo non terminale farà parte dei FIRST di quel non terminale pertanto: 1. Si osservi come il carattere ) non fa parte di alcun FIRST non essendo raggiunto da nessun non terminale 2. Si osservi che il grafo è aciclico in quanto non sono presenti regole ricorsive a sinistra
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=
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
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 ([email protected]) Dipartimento di Informatica Università degli Studi di Bari Grammatiche
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)
Esempio stringhe palindrome 1
Esempio stringhe palindrome 1 Automa per il riconoscimento del linguaggio L = {w c w R } A = < {s,f}, {a,b,c}, {a,b},!, s, { f } > con! che contiene le transizioni: 1. (( s, a, " ), (s, a)! [ push a] 2.
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.
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
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
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,
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.
Alberi. Alberi: definizioni. Alberi Binari. Esercizi su alberi binari: metodi ricorsivi. Struttura dati per alberi generici. ASD-L - Luca Tesei
Alberi Alberi: definizioni Alberi Binari Esercizi su alberi binari: metodi ricorsivi Struttura dati per alberi generici 1 Alberi Gli alberi sono strutture dati naturalmente ricorsive Un albero è un particolare
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
Fondamenti dell Informatica a.a. 2017/18 Prova scritta 11 gennaio 2018
Fondamenti dell Informatica a.a. 2017/18 Prova scritta 11 gennaio 2018 Esercizio 1 (Automi a stati finiti) {a, b}. Si considerino i seguenti automi a stati finiti sull alfabeto Per ognuno degli automi,
Linguaggi Regolari e Linguaggi Liberi
Linguaggi Regolari e Linguaggi Liberi Linguaggi regolari Potere espressivo degli automi Costruzione di una grammatica equivalente a un automa Grammatiche regolari Potere espressivo delle grammatiche 1
Dispensa 2. Data una grammatica context free esistono tre metodi diversi per costruirne la parsing table per un parser LR:
Dispensa 2 2.1 Costruzione Parsing Table LR: generalità Come tutti i parser tabellari predittivi, anche i parser LR possono essere applicati solo a parsing table senza conflitti (ossia entrate multiple)
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
Linguaggi Regolari e Linguaggi Liberi
Linguaggi Regolari e Linguaggi Liberi Potenza espressiva degli automi Potenza espressiva delle grammatiche 9/11/2004 Programmazione - Luca Tesei 1 Linguaggi Regolari Tutti i linguaggi che possono essere
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
Alberi: definizioni e dimostrazioni induttive.
Alberi: definizioni e dimostrazioni induttive. Gennaio 2005 Iniziamo con l introdurre la nozione di albero. Con N indichiamo l insieme dei numeri naturali (zero escluso) e con N l insieme delle liste finite
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
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
Suffix Trees. Docente: Nicolò Cesa-Bianchi versione 21 settembre 2017
Complementi di Algoritmi e Strutture Dati Suffix Trees Docente: Nicolò Cesa-Bianchi versione 21 settembre 2017 In generale, possiamo trovare tutte le occorrenze di un pattern y in un testo x in tempo O(
Esercizi di Informatica Teorica - DFA
Esercizi di Informatica Teorica - DFA Esercizio Definire, se esso esiste, l automa deterministico a stati finiti A che riconosce il linguaggio L = {w w {,},w[i] =, i dispari,i > }. Dimostrare rigorosamente
RISOLUZIONE IN LOGICA PROPOSIZIONALE. Giovanna D Agostino Dipartimento di Matemaica e Informatica, Università di Udine
RISOLUZIONE IN LOGICA PROPOSIZIONALE Giovanna D Agostino Dipartimento di Matemaica e Informatica, Università di Udine 1. Risoluzione Definitione 1.1. Un letterale l è una variabile proposizionale (letterale
Traduttore diretto dalla sintassi (seconda parte) Giuseppe Morelli
Traduttore diretto dalla sintassi (seconda parte) Giuseppe Morelli Traduzione di linguaggi guidata da Grammatiche Context Free La traduzione diretta della sintassi avviene associando regole e/o frammenti
albero sintattico parser scanner Errori sintattici
albero programma scanner tokens parser sintattico rrori sintattici Un parser deve riconoscere la struttura di una stringa di ingresso, la cui struttura è fornita in termini di regole di produzione di una
GRAMMATICHE LIBERE DAL CONTESTO
GRAMMATICHE LIBERE DAL CONTESTO Una grammatica è, intuitivamente, un insieme di regole che permettono di generare un linguaggio. Un ruolo fondamentale tra le grammatiche è costituito dalle grammatiche
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:
Parser Bottom UP. Giuseppe Morelli
Parser Bottom UP Giuseppe Morelli Parser Bottom UP Un parser Bottom Up lavora costruendo il corrispondente albero di parsing per una data stringa di input partendo dalle foglie (bottom) e risalendo via
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
AUTOMA A STATI FINITI
Gli Automi Un Automa è un dispositivo, o un suo modello in forma di macchina sequenziale, creato per eseguire un particolare compito, che può trovarsi in diverse configurazioni più o meno complesse caratterizzate
Alberi binari e alberi binari di ricerca
Alberi binari e alberi binari di ricerca Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica
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
