Re why Marpa considers your grammar ambiguous.  Marpa's big departure from
yacc and PEG is that it does not leave you guessing why it does what it
does.

If Marpa considers a parse ambiguous you can ask it why:
http://search.cpan.org/~jkegl/Marpa-R2-3.000000/pod/Scanless/R.pod#ambiguous%28%29

That just picks two of the parses and points out the difference, which will
often give you the idea.  For more details, you can get all the parse
results using multiple calls to $recce->value().

Btw, Marpa::R2's $grammar->parse() call uses $grammar->ambiguous internally
-- it considers parse ambiguity an error and reports it as such
automatically.  If this is in keeping with the philosophy of
MarpaX::Simple, you may want to include it.

On Sat, Jun 18, 2016 at 4:03 AM, <perlan...@gmail.com> wrote:

> Thanks, my initial googling didn't point to the Scanless/R.pod document.
> Anyway I didn't raise the limit and simply modified the grammar to be like
> in Scanless/DSL.pod. I entirely don't understand why the previous grammar
> was considered too ambiguous by Marpa though, will it seems to be doing
> okay with perl regex or Regexp::Grammars or perl 6. The right associativity
> now works though.
>
> The new version improves the speed, but not drastically [1]. As the number
> of terms in the benchmark expression (1+1+..+1) is increased to hundreds
> and up to a thousand, the Marpa version seems to be close to 3x slower than
> the regex version.
>
> [1]
> https://metacpan.org/pod/release/PERLANCAR/Bencher-Scenarios-PERLANCARParseArithmetic-0.004/lib/Bencher/Scenario/PERLANCARParseArithmetic/parse_arithmetic.pm
>
> On Saturday, June 18, 2016 at 10:49:16 AM UTC+7, Jeffrey Kegler wrote:
>>
>> Quick answers for 2 & 3
>>
>> 2.) See
>> https://metacpan.org/pod/distribution/Marpa-R2/pod/Scanless/R.pod#too_many_earley_items
>> for how to raise this limit or eliminate it entirely.  Although, the fact
>> you are hitting this limit is almost always a sign your grammar is too
>> ambiguous.
>>
>> 3.) Look at the grammar in the synopsis of
>> https://metacpan.org/pod/distribution/Marpa-R2/pod/Scanless/DSL.pod.
>> You are breaking your arithmetic expression into separate statements and
>> "assoc => right" is only effective within a single precedenced statement.
>> This means the way you wrote it, it has no effect.
>>
>> Doing a precedenced statement for 3) may fix 1) and 2)  as well.  These
>> answers are off the top of my head and untested.
>>
>>
>> On Fri, Jun 17, 2016 at 8:22 PM, <perl...@gmail.com> wrote:
>>
>>> Hi guys,
>>>
>>> I've been using Perl 5.010 regex to do some parsing, e.g. in Data::Csel
>>> [1] to parse CSS-selector-like expression, due to its relatively low
>>> startup overhead compared to Marpa or Regexp::Grammars. A couple of days
>>> ago, after reading about a topic in perl6 subreddit [2], I did a comparison
>>> benchmark [5] for a simple arithmetic parser using perl [3] vs Marpa [4].
>>> My questions:
>>>
>>> 1) how do I improve the Marpa version's performance?
>>> 2) how to remove the "Earley item count (N) exceeds warning threshold"?
>>> This happens for 1+1+..+1 (100x) expression but not for the 20x or below.
>>> 3) how do I make right associativity work? The Marpa version still
>>> evaluates ** operator left to right.
>>>
>>> regards,
>>> perlancar
>>>
>>> [1] https://metacpan.org/pod/Data::CSel
>>> [2] https://www.reddit.com/r/perl6
>>> [3]
>>> https://metacpan.org/pod/release/PERLANCAR/PERLANCAR-Parse-Arithmetic-0.001/lib/PERLANCAR/Parse/Arithmetic.pm
>>> [4]
>>> https://metacpan.org/pod/release/PERLANCAR/PERLANCAR-Parse-Arithmetic-0.001/lib/PERLANCAR/Parse/Arithmetic/Marpa.pm
>>> [5]
>>> https://metacpan.org/pod/release/PERLANCAR/Bencher-Scenarios-PERLANCARParseArithmetic-0.002/lib/Bencher/Scenario/PERLANCARParseArithmetic/parse_arithmetic.pm
>>>
>>> --
>>> 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 marpa-parser...@googlegroups.com.
>>> 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 marpa-parser+unsubscr...@googlegroups.com.
> 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 marpa-parser+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to