Why can't a recursive-descent parser handle left recursion
Could someone please explain to me why recursive-descent parsers can't work with a grammar containing left recursion? consider: A ::= A B the equivalent code is boolean A() { if (A()) { return B(); } return false; } see the infinite recursion? For whoever is interested A ::= A B | A C | D | E can be rewritten as: A ::= (D | E) (B | C)* The general form of the transformation is: any one of the non left recursive disjuncts followed by any number of the left recursive disjuncts without the first element. Reforming the action code is a bit trickery but I thing that can be plug-n-chug as well. 来源: