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