First of all the terms LL and LR apply to both grammars and parsers. LL parsers means Left to right Leftmost derivatation. LL grammars are special grammars where LL(k) grammar means that an unambiguous production may be selected from the list given _only_ K tokens of lookahead. (This implies that left recursion is forbidden). LR parsers are Left to Right right most derivation in reverse. An LR(K) grammar is a grammar where we can recognize the right side of a production having seen all of what is derived from that right side with K tokens of lookahead. LR grammars can describe more languages than LL grammars can. A brief general taxonomy of parsers NOTE: Be aware that there exists a parser that may parse any unambiguous context free grammar (CFG) in N**3 time. However most computer languages grammars can be parsed with much less. Unversal Parsers Cocke-Younger-Kasami, Earleys algorithm. Can parse any algorithm Are generally slow and are not usually needed for real world application Top Down Parsers Recursive Descent Parsers P::RD is one of these. (Caveats below) According to the dragon rarely used due to speed issues. P::RD thus may be the most commonly used recursive decent parser. Fairly easy to write compared to non backtracking methods. Parse LL grammars Build a grammar tree and then walk the tree. Predictive Parser Special subset of recursive descent with no backtracking. Non backtracking. Parse subset of LL grammars. (LL(1)) Uses either tabular or tree based grammar representations. Bottom Up Parsers LR Parsers Parses a large subset of CFG's (LR grammars) Most general nonbacktracking shift-reduce parsing method known yet effecient as well. LR parsers can parse anything a predictive parser can parse and more LR parsers detect errors as soon as it is possible in a left to right scan Difficult to write by hand as state transition tables are used and must be generated. 3 common forms: SLR LALR LR. (least powerful and cheapest to most powerful and most expensive) YACC produces an LALR compiler. Are often very fast. Operator Precedence Parsers Can only handle a subset of CFGs (known as Operator grammars) A grammar is an operator grammar IFF it has no production right side with two adjacent nonterminals. Easy to write by hand. Difficult to prove correct, only apply to a limited subset of grammars has problem with grammars where an operator has different precedence (eg unary and binary -) Often combined with recursive descent techniques where needed. P::RD is a topdown (i was confused on this issue yesterday) LL parser. It cannot handle any form of left recursion. P::RD is actually an interesting beast that doesnt fit into the catagories and definitions that ive read very well. For instance it does not use a tokenizer (it IS a tokenizer!) It could be used for predictive parsing using dynamic rules. It includes tree pruning abilities like it uses pragmas to make avoiding certain problems easy ( ). In fact in general following my review I can see (some reasons) why Damian did the things he did and why he hasnt done the things he hasnt. In all P::RD is a very perlish dynamic recursive descent parser. Some thoughts: Since P::RD can only handle LL grammars it would seem that a tutorial on eliminating left recursion would be useful. As would an automatic way to eliminate that recursion (there is a known algorithm for doing this) just as Damian say in the docs. Argh: here it is How to eliminate Left Recursion:(extracted from Red Dragon page 47)