Gramatyka bezkontekstowa i PDA

Jeśli gramatyka G jest bezkontekstowy, możemy zbudować równoważny niedeterministyczny PDA, który akceptuje język, który jest tworzony przez gramatykę bezkontekstową G. Dla gramatyki można zbudować parserG.

Także jeśli P jest automatem przesuwającym w dół, można skonstruować równoważną gramatykę bezkontekstową G, gdzie

L(G) = L(P)

W następnych dwóch tematach omówimy, jak konwertować z PDA do CFG i odwrotnie.

Algorytm znajdowania PDA odpowiadającego danemu CFG

Input - A CFG, G = (V, T, P, S)

Output- Równoważne PDA, P = (Q, ∑, S, δ, q 0 , I, F)

Step 1 - Zamień produkcje CFG na GNF.

Step 2 - PDA będzie miał tylko jeden stan {q}.

Step 3 - Symbol startu CFG będzie symbolem startu w PDA.

Step 4 - Wszystkie nieterminale CFG będą symbolami stosu PDA, a wszystkie terminale CFG będą symbolami wejściowymi PDA.

Step 5 - Do każdej produkcji w formie A → aX gdzie a jest terminalem i A, X są kombinacją terminali i nieterminali, wykonaj przejście δ (q, a, A).

Problem

Skonstruuj PDA na podstawie poniższego CFG.

G = ({S, X}, {a, b}, P, S)

gdzie są produkcje -

S → XS | ε , A → aXb | Ab | ab

Rozwiązanie

Niech równoważny PDA,

P = ({q}, {a, b}, {a, b, X, S}, δ, q, S)

gdzie δ -

δ (q, ε, S) = {(q, XS), (q, ε)}

δ (q, ε, X) = {(q, aXb), (q, Xb), (q, ab)}

δ (q, a, a) = {(q, ε)}

δ (q, 1, 1) = {(q, ε)}

Algorytm znajdowania CFG odpowiadającego danemu PDA

Input - A CFG, G = (V, T, P, S)

Output- Równoważne PDA, P = (Q, ∑, S, δ, q 0 , I, F) takie, że nieterminalami gramatyki G będą {X wx | W, X ∈ P} i stanu początkowego będzie Q0, M .

Step 1- Dla każdego w, x, y, z ∈ Q, m ∈ S i a, b ∈ ∑, jeśli δ (w, a, ε) zawiera (y, m) i (z, b, m) zawiera (x, ε), dodaj regułę produkcji X wx → a X yz b w gramatyce G.

Step 2- Dla każdego w, x, y, z ∈ Q dodaj regułę produkcji X wx → X wy X yx w gramatyce G.

Step 3- Dla w ∈ Q dodaj regułę produkcji X ww → ε w gramatyce G.