Ocean of Awareness
Wed, 20 Jun 2012
Marpa & customizing the Ruby Slippers
Ruby Slippers parsing.
But the Ruby Slippers were just part of a broader feature
of Marpa -- its "situational awareness".
latest release of Marpa::R2,
applications now have
efficient access to the broader awareness.
For those new to this blog
Marpa is something new in parsing --
it parses anything you can write in BNF and,
if your grammar is in one of the classes currently in practical use,
parses it in linear time.
Marpa::R2's parse engine is written in optimized C,
so that Marpa::R2's speed is competitive with parsers of far less power.
Marpa knows at every point in the parse,
which rules are possible,
how far into those rules the parse has already gotten,
and where those rules might start.
This degree of situational awareness is unusual in a parser,
and the more "production quality" the parser,
the more unusual it is.
This seems paradoxical.
Situational awareness seems like a
common sense thing to want in any parser,
and certainly in one that you'd hope would be able to
produce quality error messages.
But the practice has been for parsers,
as a way to achieve efficiency,
to turn their grammar into an abstraction.
This can be OK if all goes as planned, but if anything
goes wrong it means these parsers don't really have a clue
what it was.
stable distribution, Marpa::XS,
Marpa already made situational awareness available in
a form that allowed Ruby Slippers parsing --
at any point in the parse,
it could return a list of expected tokens.
A full description of the parse was also available in
Marpa::XS's progress reports,
which gave this information in text form.
This was wonderful for tracing parsing issues,
but it was not a convenient form for
its latest release,
makes available the "raw" data
behind the progress reports.
This is ideal for post-processing.
My hope is that users will use this to
invent their own advanced parsing tricks
-- customized versions of the Ruby Slippers.
The road is open.
is fast, powerful and maneuverable.
posted at: 17:57 |
direct link to this entry