Ocean of Awareness

Jeffrey Kegler's blog about Marpa, his new parsing algorithm, and other topics of interest

Jeffrey's personal website


Marpa resources

The Marpa website

The Ocean of Awareness blog: home page, chronological index, and annotated index.

Mon, 03 Sep 2012

Marpa::R2 is beta

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.

The Marpa::R2 module is the most recent Marpa module. Marpa is also available as the Marpa::XS module, which is stable and bug-fix only. Both Marpa modules:

  1. Parse everything you can write in BNF.

  2. Parse all classes of grammar in practical use today in linear time.

  3. 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.

  4. 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.

  5. Do not need to be handwritten. Marpa is available as a open-source library. It is written in C, and the C library can be used directly or via a Perl interface.

  6. For general BNF parsing, do not require the user to craft a lookahead or backtracking strategy -- Marpa does not use lookahead and never backtracks.

  7. 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:

  1. Marpa::R2 is faster.

  2. Marpa::R2 is easier to install. In particular the dependency on Glib has been removed. Marpa::R2 now has no non-core CPAN dependencies.

  3. Marpa::R2's internal symbols are now invisible to the user, even when tracing and debugging.

  4. Libmarpa, the C library which is at the core of Marpa, is now documented and separately installable. (Libmarpa remains alpha at this point.)

  5. Another new documented interface, Marpa::R2::Thin, is a "thin" interface to Libmarpa from Perl. (Marpa::R2::Thin remains alpha at this point.)

posted at: 17:16 | direct link to this entry

§         §         §