A few of you have written in asking about left-recursion issues in the grammar. The problem is that there are a few productions of the form: string_decl_list -> string_decl {string_decl_tail} string_decl -> STRING id := str ; | empty str -> STRINGLITERAL string_decl_tail -> string_decl {string_decl_tail} Do you see the issue? Because string_decl can evaluate to empty, string_decl_tail winds up featuring left recursion. It's a hidden sort of left-recursion that is tricky to deal with. What some people have done is rewrite these sorts of rules as follows: string_decl_list -> string_decl {string_decl_tail} | empty string_decl -> STRING id := str ; str -> STRINGLITERAL string_decl_tail -> string_decl {string_decl_tail} | empty This still admits the empty string (because string_decl_list can explicitly evaluate to empty), but has eliminated the hidden left recursion. There are a couple other places in the grammar with a similar issue. Feel free to use this transformation if you need to. ** If you refactor the grammar, please include a file detailing the new grammar in your submission for this step **