Given a Context Free Grammar, CFG, in Greibach Normal Form, A -> aB1B2B3... Construct an NPDA machine that accepts the same language as that grammar. We are given G = ( V, T, P, S ) and must now construct M = ( Q, Sigma, Gamma, delta, q0, Z0, F) Q = {q} the one and only state! Sigma = T Gamma = V delta is shown below q0 = q Z0 = S F = Phi NPDA will "accept on empty stack" Now, for each production in P (individual production, no vertical bars) A -> a gamma constructs | | | | | +-------------+ | | | +-----------+ | gamma is a possibly empty, sequence of | | | symbols from Gamma +---+ | | | | | V V V delta(q, a, A) = {(q, gamma), more may come from other productions} If gamma is empty, use epsilon as in (q, epsilon) Finished! An example: Given production Resulting delta # C -> 0 C T delta(q, 0, C) = (q, CT) 1 C -> 0 T T delta(q, 0, C) = (q, TT) 2 S -> 0 C delta(q, 0, S) = (q, C) 3 S -> 0 T delta(q, 0, S) = (q, T) 4 T -> 1 delta(q, 1, T) = (q, #e) 5 NPDA running with input tape 0011 and initial stack S 0011 |S| ^ | | delta #3 and #4 both apply, resulting in two stacks and advancing input 0011 |C| |T| ^ | | | | delta #1 and #2 apply to the first stack, the second stack dies, advancing 0011 |C| |T| dies ^ |T| |T| | | | | delta #5 applies to the second stack, the first stack dies, advancing 0011 dies |T| ^ | | delta #5 applies, the stack becomes empty and advance to beyond input 0011 | | ^ | | accept input string. Another conversion algorithm that uses more states, three to be exact, is somewhat simpler. We are given G = ( V, T, P, S ) and must now construct M = ( Q, Sigma, Gamma, delta, q0, Z0, F) Q = {q0, q1, q2} Sigma = T Gamma = V union {Z} where Z not in V (an extra symbol) delta = Q x (Sigma union epsilon) x Gamma -> Q x Gamma shown below q0 = q0 Z0 = Z (to get the NPDA started) F = q2 the final accepting state Two predefined transitions, the start and the accept are: delta(q0, epsilon, Z) = { (q1, SZ) } delta(q1, epsilon, Z) = { (q2, Z) } For every rule in P , Greibach normal form, A -> aU generate delta(q1, a, A) = { (q1, U) } union all other sets from (q1, a, A) Note: The empty string must be removed to create Greibach normal form, thus a grammar that initially accepted the empty string needs the extra transition delta(q0, epsilon, Z) = { (q2, Z) } The conversion is proved to simulate a leftmost derivation.
The blog provides study material for Computer Science(CS) aspirants. Mostly says "material nahi milta, padhun kahan se.", I think If you can not find content on the Internet, then you are not a CS student. Dedicated to (Prof. Rakesh Kumar, DCSA, K.U.Kurukshetra, HARYANA, INDIA)- "Ek teacher ka bahut jyada padhna, bahut jyada jaroori hota hai."
Monday, 24 June 2013
CFG/CFL to NPDA
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment