Marpa::R2 is nearly frozen and the new $slg->parse() is squeezed in past
the freeze as an exception, because it will be very good for those just
starting -- it simplifies the initial tutorial and example a good deal.
These suggestions may have more merit as a design, but they get *way*
beyond that intent. My intent is that those who want to do anything
fancy simply ditch $slg->parse() and use the lower level methods, as
currently, and with that idea I kept the features to a minimum, and
avoided access to the fancier features, like events or ASF's.
-- jeffrey
On 09/11/2014 09:51 PM, Ruslan Shvedov wrote:
I've been using parse when working on commonmark parser
<https://github.com/rns/MarpaX-Languages-CommonMark-AST> and here is
the how it turned out.
First, parse() does a great job when testing with unambiguous grammar
and input — it throws an exception on ambiguity and that's what you want.
However, when thing get more complex and I needed, e.g. just dump
multiple parses, the recognizer is hidden behind the otherwise very
useful parse() interface, and to do that _while still keeping the
behaviour in unambiguous case_, I had to mimic parse()'s
functionality, like this
<https://github.com/rns/MarpaX-Languages-CommonMark-AST/blob/master/lib/MarpaX/Languages/CommonMark/AST.pm#L236>.
I understand that it is by design, hence my suggestion is that in list
context parse(), rather than throwing an exception, return its
recognizer (probably after series_restart() so that it's ready to
use), like this.
my ($value, $recognizer) = $slg->parse( { input => \$input } );
Another, arguably better, option would be to return the abstract
syntax forest parse() produces, e.g.
my ($value, $asf) = $slg->parse( { input => \$input } );
This would require adding recognizer() method to Marpa::R2::ASF
(grammar() is already there) .
The full use case I have in mind:
my ($value, $recognizer_or_asf) = $slg->parse( { input => \$input } );
# check for ambiguity
if (not defined $value){
# use the recognizer or the asf to handle ambiguity
# and find the required value
# e.g. sort the parses or prune the ASF or the ASTs
# ...
}
# process $value if needed
# ...
The case where exception is thrown on ambiguity continues as is:
my $value = $slg->parse( { input => \$input } );
--
You received this message because you are subscribed to the Google
Groups "marpa parser" group.
To unsubscribe from this group and stop receiving emails from it, send
an email to [email protected]
<mailto:[email protected]>.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "marpa
parser" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.