PDA e grammatica senza contesto
Se una grammatica G è context-free, possiamo costruire un PDA non deterministico equivalente che accetta il linguaggio prodotto dalla grammatica context-free G. È possibile creare un parser per la grammaticaG.
Inoltre, se P è un automa pushdown, una grammatica libera dal contesto equivalente può essere costruita dove
L(G) = L(P)
Nei prossimi due argomenti, discuteremo come convertire da PDA a CFG e viceversa.
Algoritmo per trovare PDA corrispondente a un dato CFG
Input - A CFG, G = (V, T, P, S)
Output- Equivalente PDA, P = (Q, ∑, S, δ, q 0 , I, F)
Step 1 - Converti le produzioni del CFG in GNF.
Step 2 - Il PDA avrà un solo stato {q}.
Step 3 - Il simbolo di inizio di CFG sarà il simbolo di inizio nel PDA.
Step 4 - Tutti i non terminali del CFG saranno i simboli dello stack del PDA e tutti i terminali del CFG saranno i simboli di input del PDA.
Step 5 - Per ogni produzione nella forma A → aX dove a è terminale e A, X sono una combinazione di terminali e non terminali, effettuare una transizione δ (q, a, A).
Problema
Costruisci un PDA dal seguente CFG.
G = ({S, X}, {a, b}, P, S)
dove sono le produzioni -
S → XS | ε , A → aXb | Ab | ab
Soluzione
Lascia che l'equivalente PDA,
P = ({q}, {a, b}, {a, b, X, S}, δ, q, S)
dove δ -
δ (q, ε, S) = {(q, XS), (q, ε)}
δ (q, ε, X) = {(q, aXb), (q, Xb), (q, ab)}
δ (q, a, a) = {(q, ε)}
δ (q, 1, 1) = {(q, ε)}
Algoritmo per trovare CFG corrispondente a un dato PDA
Input - A CFG, G = (V, T, P, S)
Output- Equivalente PDA, P = (Q, ∑, S, δ, q 0 , I, F) tale che i non terminali della grammatica G saranno {X wx | w, x ∈ Q} e lo stato di avvio sarà un q0, F .
Step 1- Per ogni w, x, y, z ∈ Q, m ∈ S e a, b ∈ ∑, se δ (w, a, ε) contiene (y, m) e (z, b, m) contiene (x, ε), aggiungi la regola di produzione X wx → a X yz b nella grammatica G.
Step 2- Per ogni w, x, y, z ∈ Q, aggiungi la regola di produzione X wx → X wy X yx nella grammatica G.
Step 3- Per w ∈ Q, aggiungi la regola di produzione X ww → ε nella grammatica G.