IIRC, no.  You could always create an array of ranks indexed by rule
number, though the need to duplicate the information is, I admit, annoying.

On Wed, Aug 8, 2018 at 6:21 PM, Michael Spertus <spertus.mich...@gmail.com>
wrote:

> Forgot to ask: Is there a way for me to access a rule's rank from within
> its semantic action? That way I could simulate the tree ordering from
> indirect ranks during ASF pruning
>
> Thanks,
> Mike
>
>
> On Wednesday, August 8, 2018 at 2:50:16 PM UTC-7, Michael Spertus wrote:
>>
>> Thanks for the response Jeffrey. That would be awesome. Consider this a
>> vote for early bailing (Earley bailing?) in R3.
>>
>> Mike
>>
>> On Wednesday, August 8, 2018 at 1:40:47 PM UTC-5, Jeffrey Kegler wrote:
>>>
>>> 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 <spertus...@gmail.com>
>>> 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 <spertus...@gmail.com>
>>>>> 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 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...@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