Marpa::R2 is beta
[ blogs.perl.org has been a wonderful home, but I have finally given in to the lure of static blogging. This is cross-posted from the new home of the Ocean of Awareness blog. ]
Marpa::R2 is now beta. Marpa is a new parsing algorithm, based on decades of prior art. It is a practical and efficient solution targeted at all parsing problems that are too complex for regular expressions.
Parse everything you can write in BNF.
Parse all classes of grammar in practical use today in linear time.
Parse all BNF grammars in times considered theoretically optimal. For unambiguous grammars, Marpa is never worse than O(n2). For ambiguous grammars, Marpa is never worse than O(n3). Marpa never goes exponential.
Are fully aware, at every point in the parse, of all the rules they are parsing, how far into them they have proceeded, and of what tokens they expect next. Especially with Marpa::R2, this information is available to the application conveniently and efficiently.
For general BNF parsing, do not require the user to craft a lookahead or backtracking strategy -- Marpa does not use lookahead and never backtracks.
Come with the traditional theoretical apparatus of proofs based on prior literature.
Marpa::R2 is a major rewrite of the Marpa internals. The most visible of these changes:
Marpa::R2 is faster.
Marpa::R2 is easier to install. In particular the dependency on Glib has been removed. Marpa::R2 now has no non-core CPAN dependencies.
Marpa::R2's internal symbols are now invisible to the user, even when tracing and debugging.
Libmarpa, the C library which is at the core of Marpa, is now documented and separately installable. (Libmarpa remains alpha at this point.)
Another new documented interface, Marpa::R2::Thin, is a "thin" interface to Libmarpa from Perl. (Marpa::R2::Thin remains alpha at this point.)