Context-Free Grammar to Pushdown Automaton Conversion (CFG to PDA)

(This video is outdated; see a higher quality version here: • Context Free Grammar t... )
Here we show how to convert any CFG (context-free grammar) into a PDA (pushdown automaton). The key idea is to simulate the derivation of some string in the CFG on the stack itself of the PDA. The construction involves building 4 "base" states, and then self loops on the third state for each terminal. Initially push on a $, then the start variable, and pop the $ going to the 4th state. Then, add a series of transitions for every rule, popping the LHS variable, and then pushing on the RHS in reverse order.
----------------------------------------------------------------------------------------------------------------
What is a context-free grammar? It is a set of 4 items: a set of "variables," a set of "terminals," a "start variable," and a set of rules. Each rule must involve a single variable on its "left side", and any combination of variables and terminals on its right side. See • Context-Free Grammars ... for more details.
What is a pushdown automaton? It is a finite state machine, where on each transition, items can be pushed or popped off of a stack it has, which has unlimited height. See • What is a Pushdown Aut... for more details.
----------------------------------------------------------------------------------------------------------------
If you like this content, please consider subscribing to my channel: / @easytheory
▶ADDITIONAL QUESTIONS◀
1. What would the PDA look like if the CFG were in Chomsky Normal Form?
2. What if the grammar were a regular grammar?
▶ABOUT ME◀
I am a professor of Computer Science, and am passionate about CS theory. I have taught over 12 courses at Arizona State University, as well as Colgate University, including several sections of undergraduate theory.

Пікірлер: 86

  • @goobles3991
    @goobles39913 жыл бұрын

    You are the best Automata Theory youtube channel. It's a niche title, but you earned it.

  • @EasyTheory

    @EasyTheory

    3 жыл бұрын

    I'll accept my award and parade soon :) (thanks very much!)

  • @moeyali123

    @moeyali123

    Жыл бұрын

    I agree

  • @prakhartiiwarii
    @prakhartiiwarii3 жыл бұрын

    Finally, a short and to-the-point video clearing out the concepts! Thanks ✌🏻

  • @EasyTheory

    @EasyTheory

    3 жыл бұрын

    You're welcome!

  • @Shan-gn7mg

    @Shan-gn7mg

    Жыл бұрын

    @@EasyTheory yes please do more vids like this, it's more efficient and easy to understand.

  • @Shan-gn7mg

    @Shan-gn7mg

    Жыл бұрын

    @@EasyTheory is that possible to do a same version for pda to cfg?

  • @konstantinsazhnev
    @konstantinsazhnev Жыл бұрын

    Great example and works for every CFG. The only thing I would add is if you have recursion in the same production like S --> abSb | epsilon then we have to make another loop to remove S from the stack within the loop state mentioned in the video.

  • @thatguy7802
    @thatguy7802 Жыл бұрын

    I have an assignment due in an hour and you may have just saved me a letter grade. Thank you!

  • @matthewsocoollike
    @matthewsocoollike2 жыл бұрын

    wow. thank you so much. I was watching other videos so confused by all the math. your video made it super simple, thank you.

  • @inarazahin5786
    @inarazahin57863 жыл бұрын

    This is the best explanation so far. It is concise and to the point. Thanks for this video.

  • @EasyTheory

    @EasyTheory

    3 жыл бұрын

    You're very welcome!

  • @ashleyarmenta2289
    @ashleyarmenta22892 жыл бұрын

    This is the best PDA explanation video that I've found, thank you!

  • @techademy9354
    @techademy93542 жыл бұрын

    The man, the myth, and the legend of theory of computation and teaching in general!

  • @jaegergaming02
    @jaegergaming022 жыл бұрын

    Thank you!!! This made so much more sense than the other explanations i found

  • @alvihabib
    @alvihabib3 жыл бұрын

    You are THE MAN. Thanks for this awesome explanation!

  • @EasyTheory

    @EasyTheory

    3 жыл бұрын

    Alvi Habib thanks very much! Make sure to check out the lecture series I'm currently doing.

  • @pk-le5bb
    @pk-le5bb2 жыл бұрын

    clear, concise, and comprehensive. you are a godsend, thank you

  • @user-cg5jo2uy3f
    @user-cg5jo2uy3f Жыл бұрын

    i luv the clear way u describe. THX for saving my final💪

  • @cadencetennant3303
    @cadencetennant33032 жыл бұрын

    Super helpful! I understand it so much better now.

  • @Patrick-S3
    @Patrick-S3Ай бұрын

    Fantastic video! This helped me so much!!!

  • @melissamarlen1022
    @melissamarlen1022 Жыл бұрын

    This was such a great video! Thank you so much!

  • @Jessislegend
    @Jessislegend3 жыл бұрын

    Good explanation! Much appreciated

  • @TheWiimaster456
    @TheWiimaster4563 жыл бұрын

    FINALLY an English Video thank you so much man this was great

  • @EasyTheory

    @EasyTheory

    3 жыл бұрын

    Lol thanks!

  • @woodfur00
    @woodfur00 Жыл бұрын

    Perfectly explained, bless you 🙏

  • @ShaidaMuhammad
    @ShaidaMuhammad3 жыл бұрын

    Man, It was 6th video in my KZread search "cfg to pda" which I understood. Thanks man.

  • @EasyTheory

    @EasyTheory

    3 жыл бұрын

    5 more spots to rise up! ;)

  • @ShaidaMuhammad

    @ShaidaMuhammad

    3 жыл бұрын

    @@EasyTheory Yeah, The volume was a bit slow, but headphones worked fine for me.

  • @rosenv.1953
    @rosenv.19533 жыл бұрын

    How would this look if we accept by final state rather than empty stack?

  • @farwahbatool6247
    @farwahbatool62472 жыл бұрын

    You're the man I take refuge in 😢🙌🏻💖

  • @dilaragoral2259
    @dilaragoral22593 жыл бұрын

    Thank you so much, you saved a lot of lives!!

  • @EasyTheory

    @EasyTheory

    3 жыл бұрын

    You're very welcome!

  • @alexoxley5058
    @alexoxley50582 жыл бұрын

    Thank you so much, really helped!

  • @FernandaRodriguez-xf3lr
    @FernandaRodriguez-xf3lr7 ай бұрын

    Thank you!! This is a great video

  • @rotisosis8285
    @rotisosis82853 жыл бұрын

    Thank you so much now is easy to do my homework.

  • @globalxoxo
    @globalxoxo Жыл бұрын

    Amazing video Sir Alan

  • @wengeance8962
    @wengeance89623 жыл бұрын

    So how do you represent S -> A, would this just be a self loop on qloop being (epsilon, S -> A)?

  • @EasyTheory

    @EasyTheory

    3 жыл бұрын

    Yes, correct! Or you can have two transitions that "go out of qloop and come back" but that's not necessary.

  • @cihadozcan1035
    @cihadozcan10353 жыл бұрын

    Thanks for neat explanation

  • @justinkuang9423
    @justinkuang94233 жыл бұрын

    Another great vid 👌🏻

  • @dan-cj1rr
    @dan-cj1rr3 жыл бұрын

    Thanks for the video, i have a question, i don't understand when you're in qloop why isn't it S, S ; c instead of epsilon, S ; c would make more sens for me if it was S,S ; c no ? Or does both work. Thanks

  • @EasyTheory

    @EasyTheory

    3 жыл бұрын

    Because S, S -> c means "read an S" but that is already a problem because the input is over the input alphabet Sigma, not the stack alphabet Gamma.

  • @evaeunicemoreno6349
    @evaeunicemoreno63493 жыл бұрын

    Thanks for this! Finally, i got it ✨

  • @EasyTheory

    @EasyTheory

    3 жыл бұрын

    Great!

  • @zeitgeist18
    @zeitgeist183 жыл бұрын

    So what if instead of B -> epsilon as a production in our CFG, we had B -> a (or B-> b). Could we still use a self loop back to qloop. In other words can we use a self loop to qloop, anytime the RHS of the production has only one symbol? Excellent video btw!

  • @moatef1886

    @moatef1886

    2 жыл бұрын

    To answer your question a year later, yes you should be able to simply use a self loop back to qloop when the RHS of the production has one symbol.

  • @LPNorway
    @LPNorway2 жыл бұрын

    Thank you so much man

  • @pauldumitriu9237
    @pauldumitriu92373 жыл бұрын

    Hi there, I was wondering if you have any videos where we can go backwards? Going from a PDA to a cfg

  • @EasyTheory

    @EasyTheory

    3 жыл бұрын

    Video coming out soon :) the CFL livestream happening in a few weeks will certainly cover this too

  • @KhangNguyen-wj5jd
    @KhangNguyen-wj5jd2 жыл бұрын

    What is the software you use for drawing? It is beautiful.

  • @amanxo1
    @amanxo1 Жыл бұрын

    LMFAOOOOOOOOOOOOO thank you man this is literally what i needed

  • @shyamkannan8594
    @shyamkannan85942 жыл бұрын

    What if the language has no terminals? Then what would go in qloop

  • @amynguyen3131
    @amynguyen31313 жыл бұрын

    Thank you so much!

  • @ananayarora
    @ananayarora3 жыл бұрын

    Thank you thank you thank you so so so much!!!! I subscribed

  • @EasyTheory

    @EasyTheory

    3 жыл бұрын

    You're very welcome!

  • @sonjamariemusic
    @sonjamariemusic2 жыл бұрын

    sir. you've saved my life

  • @cobyjonah7675
    @cobyjonah7675 Жыл бұрын

    omg you are literally the best

  • @zeruihai6051
    @zeruihai60513 жыл бұрын

    Thank you sooooo sooooo much!!!!

  • @Leonidesu
    @Leonidesu Жыл бұрын

    Hi there, could you remove the pop-ups at the end of the video that goes to another video because it blocks your writing and we could not see anything.

  • @csperi-peri2447
    @csperi-peri24473 жыл бұрын

    Great Video !

  • @Dakun
    @Dakun3 жыл бұрын

    you saved me, way better explanation than my professor

  • @EasyTheory

    @EasyTheory

    3 жыл бұрын

    You're welcome!

  • @jeffchong3450
    @jeffchong3450 Жыл бұрын

    Thank you!!

  • @fernandogmail1
    @fernandogmail1 Жыл бұрын

    thank you 😭😭😭😭

  • @LasradoRohan
    @LasradoRohan3 жыл бұрын

    Loved It

  • @albanyrebelion
    @albanyrebelion23 күн бұрын

    what is the significance of the read only self loop?

  • @albanyrebelion

    @albanyrebelion

    23 күн бұрын

    is that the case even if a terminal isnt in the S(start) rule?

  • @samjudelson
    @samjudelson2 жыл бұрын

    Thanks!

  • @nabeelbaghoor1061
    @nabeelbaghoor10613 жыл бұрын

    Thanks a lot!!!!

  • @EasyTheory

    @EasyTheory

    3 жыл бұрын

    You're welcome :)

  • @DiwashHCR2
    @DiwashHCR22 жыл бұрын

    Shouldn't the transition from the second state to q-loop be (epsilon, $ -> S) .. since the input read is nothing, stack top is a dollar and to push is S?

  • @EasyTheory

    @EasyTheory

    2 жыл бұрын

    Why would you pop $ there? The whole purpose of putting the $ on the stack at the very start is to ensure we can't go to the final state unless the stack is "empty" (other than $).

  • @DiwashHCR2

    @DiwashHCR2

    2 жыл бұрын

    @@EasyTheory Thanks ... I thought the tuple was (input symbol, stack top symbol, push/pop)

  • @EasyTheory

    @EasyTheory

    2 жыл бұрын

    @@DiwashHCR2 This is where divergence in notation comes into play -- my notation (based on the Sipser book) is: (input_symbol, thing_to_pop (or not), thing_to_push (or not)). So the first transition here pushes a $, and then pushes an S (the start variable). So when we first enter q_loop, the stack contents are $S (top of stack on the right).

  • @EasyTheory

    @EasyTheory

    2 жыл бұрын

    There are some books that do force something to be popped on each transition; some others (maybe yours) does a "peek" at the top but doesn't pop; others can (maybe yours also) forces a push-only or pop-only transition.

  • @unpluggability
    @unpluggability3 жыл бұрын

    i love you.

  • @armanyama3186
    @armanyama31862 жыл бұрын

    Why we can't take all these in single loop on qloop state ?

  • @tekunalogy
    @tekunalogy3 жыл бұрын

    ❤️

  • @fatimaalamour5256
    @fatimaalamour52562 жыл бұрын

    In Germany we say Ehrenmann

  • @shaysarn2235
    @shaysarn223511 күн бұрын

    8:48

  • @darklord998
    @darklord998 Жыл бұрын

    I used this tutorial for a quiz and my professor marked it completely wrong :(

  • @beans_potatoes

    @beans_potatoes

    3 ай бұрын

    did he say why?

  • @princeelliot2836
    @princeelliot2836 Жыл бұрын

    Great video, but why not accept with empty stack and simply use two states: (We have to assume that $ is already on the stack, though. Otherwise, this automaton would accept every input.) The first state pushes the start-non-terminal on the stack and the second state loops over itself, while using every single rule from the CFG and pops terminals from the stack, while pushing nothing on the stack. The moment the stack is empty again, simply go back to the first state and push nothing on the stack. Our automaton should accept now, because the stack is empty.

  • @princeelliot2836

    @princeelliot2836

    Жыл бұрын

    Or, if we want to have an accepting state, we could add a third state and if we have an empty stack (even without $), then we go from the second state to the third one and accept.

  • @twondai2642
    @twondai26422 жыл бұрын

    what