C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
CFG to PDA ConversionThe first symbol on R.H.S. production must be a terminal symbol. The following steps are used to obtain PDA from CFG is: Step 1: Convert the given productions of CFG into GNF. Step 2: The PDA will only have one state {q}. Step 3: The initial symbol of CFG will be the initial symbol in the PDA. Step 4: For non-terminal symbol, add the following rule: δ(q, ε, A) = (q, α) Where the production rule is A → α Step 5: For each terminal symbols, add the following rule: δ(q, a, a) = (q, ε) for every terminal symbol Example 1:Convert the following grammar to a PDA that accepts the same language. S → 0S1 | A A → 1A0 | S | ε Solution: The CFG can be first simplified by eliminating unit productions: S → 0S1 | 1S0 | ε Now we will convert this CFG to GNF: S → 0SX | 1SY | ε X → 1 Y → 0 The PDA can be: R1: δ(q, ε, S) = {(q, 0SX) | (q, 1SY) | (q, ε)}
R2: δ(q, ε, X) = {(q, 1)}
R3: δ(q, ε, Y) = {(q, 0)}
R4: δ(q, 0, 0) = {(q, ε)}
R5: δ(q, 1, 1) = {(q, ε)}
Example 2:Construct PDA for the given CFG, and test whether 0104 is acceptable by this PDA. S → 0BB B → 0S | 1S | 0 Solution: The PDA can be given as:
A = {(q), (0, 1), (S, B, 0, 1), δ, q, S, ?}
The production rule δ can be: R1: δ(q, ε, S) = {(q, 0BB)}
R2: δ(q, ε, B) = {(q, 0S) | (q, 1S) | (q, 0)}
R3: δ(q, 0, 0) = {(q, ε)}
R4: δ(q, 1, 1) = {(q, ε)}
Testing 0104 i.e. 010000 against PDA:
δ(q, 010000, S) ⊢ δ(q, 010000, 0BB)
⊢ δ(q, 10000, BB) R1
⊢ δ(q, 10000,1SB) R3
⊢ δ(q, 0000, SB) R2
⊢ δ(q, 0000, 0BBB) R1
⊢ δ(q, 000, BBB) R3
⊢ δ(q, 000, 0BB) R2
⊢ δ(q, 00, BB) R3
⊢ δ(q, 00, 0B) R2
⊢ δ(q, 0, B) R3
⊢ δ(q, 0, 0) R2
⊢ δ(q, ε) R3
ACCEPT
Thus 0104 is accepted by the PDA. Example 3:Draw a PDA for the CFG given below: S → aSb S → a | b | ε Solution: The PDA can be given as:
P = {(q), (a, b), (S, a, b, z0), δ, q, z0, q}
The mapping function δ will be: R1: δ(q, ε, S) = {(q, aSb)}
R2: δ(q, ε, S) = {(q, a) | (q, b) | (q, ε)}
R3: δ(q, a, a) = {(q, ε)}
R4: δ(q, b, b) = {(q, ε)}
R5: δ(q, ε, z0) = {(q, ε)}
Simulation: Consider the string aaabb
δ(q, εaaabb, S) ⊢ δ(q, aaabb, aSb) R3
⊢ δ(q, εaabb, Sb) R1
⊢ δ(q, aabb, aSbb) R3
⊢ δ(q, εabb, Sbb) R2
⊢ δ(q, abb, abb) R3
⊢ δ(q, bb, bb) R4
⊢ δ(q, b, b) R4
⊢ δ(q, ε, z0) R5
⊢ δ(q, ε)
ACCEPT
Next TopicTuring Machine
|