Listing 1.
A Comparison of Parser Generators
Damian Conway

The man(1) of descent
The Perl Journal, Winter 1998
  The yacc column covers all yacc derivatives, including perl-byacc, Parse::Yapp, and the currently available components of libparse. The column marked "hand made" refers to special purpose parsers, such as are found inside many CPAN modules, and which are usually coded directly, without recourse to automated tools.

FeatureRecDescentYaccPCCTS Hand made
Regular expressions as terminalsYYYsometimes
Parse-time interpolated literal terminalsYNNN
Context sensitive lexingYhardhardsometimes
Tunable token separatorsYhardhardN
Requires separate tokenizerNYYsometimes
Noncontiguous productionsYNNn/a
Subrule quantifiers (repetitions, optionals)YNYn/a
Non-greedy quantifierscomingNNn/a
Inlined subproductionsYNNn/a
Subrule argumentsYNYrarely
User-defined lexical variables in subrulesYNYoften
Stubbing of missing subrulesYNNn/a
Positive and negative lookahead rulesYNNrarely
Data driven subrule selection(<matchrule>)YNNrarely
Subrule templatesYNNN
Embedded actionsYYYY
Deferred embedded actionsYNNrarely
Tunable default embedded actionsYNNN
Line and position information in actionsYpoorYsome
Automated error messagesYpoorsomeN
Conditional error messagesYNNN
Tree pruning and unpruning (commit/uncommit)YNNsometimes
Run-time modification of parserYNNrarely
Regex-based resync after failYNNN
Object oriented parserYsomeYsometimes
Parsing directly from an input streamNYYsometimes
Multiple start rulesYNNrarely
Implementation languagePerlCC++various
Parsing modelLL(k)
(recursive)
LALR(1)
(table)
LL(k)
(table)
various
Generates run-time parsersYNNn/a
Generates compile-time parser codecomingYYn/a
FastcomingYYY
Handles left recursionNYYsometimes