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.
Feature RecDescent Yacc PCCTS Hand made
Regular expressions as terminals Y Y Y sometimes
Parse-time interpolated literal terminals Y N N N
Context sensitive lexing Y hard hard sometimes
Tunable token separators Y hard hard N
Requires separate tokenizer N Y Y sometimes
Noncontiguous productions Y N N n/a
Subrule quantifiers (repetitions, optionals) Y N Y n/a
Non-greedy quantifiers coming N N n/a
Inlined subproductions Y N N n/a
Subrule arguments Y N Y rarely
User-defined lexical variables in subrules Y N Y often
Stubbing of missing subrules Y N N n/a
Positive and negative lookahead rules Y N N rarely
Data driven subrule selection(<matchrule>) Y N N rarely
Subrule templates Y N N N
Embedded actions Y Y Y Y
Deferred embedded actions Y N N rarely
Tunable default embedded actions Y N N N
Line and position information in actions Y poor Y some
Automated error messages Y poor some N
Conditional error messages Y N N N
Tree pruning and unpruning (commit/uncommit) Y N N sometimes
Run-time modification of parser Y N N rarely
Regex-based resync after fail Y N N N
Object oriented parser Y some Y sometimes
Parsing directly from an input stream N Y Y sometimes
Multiple start rules Y N N rarely
Implementation language Perl C C++ various
Parsing model LL(k)
(recursive)
LALR(1)
(table)
LL(k)
(table)
various
Generates run-time parsers Y N N n/a
Generates compile-time parser code coming Y Y n/a
Fast coming Y Y Y
Handles left recursion N Y Y sometimes