It make *lots* of sense and I've considered it as a feature in R3.  It will
never happen in R2 -- it'd be a massive risky change and R2 is stable.

Incidentally, a limited implementation of it is how LATM lexing works.  As
a special case, I selectively turn on and off predictions in Earley set 0
of the lexer.

On Wed, Aug 8, 2018 at 2:31 PM, Michael Spertus <[email protected]>
wrote:

> Thanks for the link, Amon. As I suspected, it says you should travers the
> ASF in such cases...
>
> In a related question, is there any way for me to reject a rule during the
> read() by listening for a prediction/completion events? A number of my
> rules have conditions on their arguments that are known not to be
> BNF-friendly. I know I can bail from those in a semantic action, but I
> would like to reject before an exponential explosion in the number of
> ambiguous parses. Does that make sense?
>
> Thanks,
>
> Mike
>
>
> On Wednesday, August 8, 2018 at 12:01:24 AM UTC-7, amon wrote:
>
>> Your grammar as written is ambiguous and therefore Marpa gives you all
>> parses in an unspecified order – to see them, iterate over the value
>> like
>>
>> while (my $ref = $recce->value) {
>>     print Dumper $$ref;
>> }
>>
>> Marpa's ranks are a bit unintuitive, I previously ran into very
>> similar problems. This lead to the Marpa::R2::Semantics::Rank
>> document[1] being written (Thanks Jeffrey!). That document shows a
>> related example. The solution seems to be to spell out the sequence
>> rule explicitly:
>>
>> statements ::= xy rank => 1
>> statements ::= x
>> statements ::= y
>> statements ::= statements xy rank => 1
>> statements ::= statements x
>> statements ::= statements y
>>
>> The docs emphasize: “The rank of a parse choice is the rank of the
>> rule of its cause”, which suggests the problem is the intermediate
>> statement rule. If I understand correctly, the "statements ::=
>> statement+" sequence rule has no choices because it always gets a
>> statement at each position (not a choice between x and xy). And the
>> rank within statement does not matter because … I still don't
>> understand this 100%.
>>
>> [1]: https://metacpan.org/pod/release/JKEGL/Marpa-R2-5.043_043/
>> pod/Semantics/Rank.pod
>>
>> On Wed, 8 Aug 2018 at 07:33, Michael Spertus <[email protected]>
>> wrote:
>> >
>> > This time with attachment :/
>> >
>> > On Wednesday, August 8, 2018 at 12:20:39 AM UTC-5, Michael Spertus
>> wrote:
>> >>
>> >> Thanks for helping me to get to a (surprising) answer to my previous
>> question. I was hoping you could help me with another. I want the following
>> grammar to parse 'xy' as a single statement
>> >>
>> >>> statements ::= statement+
>> >>> statement ::= xy | x | y
>> >>> x ::= 'x'
>> >>> y ::= 'y'
>> >>> xy ::= 'x' 'y'
>> >>>
>> >>
>> >> Unfortunately, it always parses as two statements, even if I use the
>> attached "high_rule_only" code and rank the statement alternatives as
>> >>
>> >>>  statement ::= xy rank => 1 | x | y
>> >>
>> >>
>> >> I still get two statements. Is there a way I can do this with
>> ordering, or do I need to do something like traverse the ASF? Note that I
>> need to do this at the ::= level rather than with lexemes because in the
>> actual grammar I care about x and y are complicated rules themselves.
>> >>
>> >> Thanks,
>> >> Mike
>> >>
>> > --
>> > 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.
>>
> --
> 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.
>

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

Reply via email to