-
Notifications
You must be signed in to change notification settings - Fork 0
Lemma 2.21
Se un linguaggio è context-free, allora esiste un automa a pila che lo riconosce.
IDEA.
Il
Ricordiamo che una derivazione è semplicemente la sequenza di sostituzioni fatte nel processo di generazione di una stringa mediante una grammatica.
Ogni passo di una derivazione produce una stringa intermedia di variabili e terminali.
Noi progettiamo
Una delle difficoltà nell'esaminare se esiste una derivazione per
Il non determinismo di un
In ogni passo della derivazione, una delle regole per una particolare variabile è scelta non deterministicamente e usata per sostituire quella variabile.
Il
Infine può giungere a una stringa che contiene solo simboli terminali, il che significa che ha usato la grammatica per derivare una stringa.
Allora
Dobbiamo capire come il
Usare semplicemente la pila per immagazzinare ciascuna stringa intermedia è allettante.
Tuttavia non funziona del tutto poiché il
Il
Il modo per aggirare questo problema è mantenere solo parte della stringa intermedia sulla pila: i simboli che iniziano con la prima variabile nella stringa intermedia.
Tutti i simboli terminali che compaiono prima della prima variabile sono subito abbinati con i simboli nella stringa di input.
Quello che segue è una descrizione informale di
-
Inserisce il simbolo marcatore $ e la variabile iniziale sulla pila.
-
Ripete i seguenti passi.
DIMOSTRAZIONE Ora diamo i dettagli formali della costruzione dell'automa a pila
Per rendere più chiara la costruzione, usiamo una notazione abbreviata per la funzione di transizione.
Questa notazione fornisce un modo per scrivere un'intera stringa sulla pila in un passo della macchina.
Possiamo simulare quest'azione introducendo stati aggiuntivi per scrivere la stringa un simbolo alla volta, come realizzato nella seguente costruzione formale.
Siano
Inoltre, vogliamo che esso inserisca l'intera stringa
Possiamo eseguire questa azione introducendo nuovi stati
Useremo la notazione
Gli stati di
Lo stato iniziale è
Cominciamo inizializzando la pila inserendo i simboli $ and
Poi aggiungiamo le transizioni per il ciclo principale del passo 2. In primo luogo, trattiamo il caso (a) in cui la cima della pila contiene una variabile. Poniamo
In secondo luogo, trattiamo il caso (b) in cui la cima della pila contiene un terminale. Poniamo
Infine: trattiamo il caso (c) in cui il marcatore scelto per indicare la pila vuota $ è sulla cima della pila. Poniamo
Questo completa la prova del Lemma 2.21.