Thank you for the quick and helpful response! This definitely explains some of the strangeness I was seeing in my larger project and I think I now have some rule rewriting to get to...
Best, -John On Thu, Feb 13, 2020 at 7:14 PM Jeffrey Kegler < [email protected]> wrote: > Thank you for your interest in Marpa, your kind words, your interesting > example and your careful write-up of it. > > Briefly, precedenced statements work by applying precedence and > associativity to instances of the LHS symbol on their RHS. In the 2nd > example, <expr> occurs outside of the precedenced statement and accordingly > precedence and associativity are not applied to those instances of <expr>, > resulting in ambiguity. > > What is going on is that precedenced rules get rewritten into BNF rules > which enforce the associativity and precedence declared in the precedenced > rule. BNF rules do not get rewritten. > > Basically, the LHS of a precedenced rule should never occur in any rule > which is a step of a derivation from the precedenced rule -- while in > theory it could have a meaning, in practice it almost always will not do > what the grammar writer actually intends. > > In R3/Kollos, I will probably have a warning issue on likely problematic > uses of the precedenced LHS outside of the precedenced rule. Or I may > simply ban them. > > Thanks, I hope this was helpful, jeffrey > > On Thu, Feb 13, 2020 at 5:28 PM John Merchant <[email protected]> > wrote: > >> Lately I've been working on developing an interpreter using Marpa::R2 v. >> 8. For the most part, things are working out very well; however, >> occasionally I run into situations where with my admittedly incomplete >> understanding I think something should work but it clearly does not (or >> vice versa). >> >> For example, consider the following two simple grammars. >> >> :default ::= action => [ values ] >>> lexeme default = latm => 1 >> >> expr ::= number >>> || expr '+' expr >>> || name '=' expr >> >> name ~ [a-z]+ >>> number ~ [0-9]+ >>> :discard ~ whitespace >>> whitespace ~ [\s]+ >> >> >> >> :default ::= action => [ values ] >>> lexeme default = latm => 1 >>> expr ::= number >>> || add_expr >>> || name '=' expr >>> add_expr ::= expr '+' expr >>> name ~ [a-z]+ >>> number ~ [0-9]+ >>> :discard ~ whitespace >>> whitespace ~ [\s]+ >> >> >> With an input string like 'a = 5 + 12', parsing with the first grammar >> produces a single parse tree ([a = [5 + 12]]). Though the second seems >> like it should be equivalent, parsing the same input string with the second >> grammar produces two parse trees ([a = [5 + 12]] and [[a = 5] + 12]). >> >> Why? Is the extra rule in the second grammar changing how precedence is >> applied? Is this a limitation of R2? Is there any way to make the second >> grammar unambiguous without say defining a second version of the expr >> table? I apologize that despite reading much of the man documentation, the >> FAQ, and a decent sampling of this list that I still don't have a really >> firm handle on how precedence affects ambiguity -- I would definitely >> appreciate any help or a nudge in the right direction. >> >> Best, >> -John M. Merchant >> >> -- >> 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]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/marpa-parser/9d3a0520-134b-4492-ac17-536552858656%40googlegroups.com >> <https://groups.google.com/d/msgid/marpa-parser/9d3a0520-134b-4492-ac17-536552858656%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- > 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]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/marpa-parser/CA%2B2Wrv9sG3wtFaUS8_k8fiLckUTAuDS3nrwTmddDUG0CU9x%2BbA%40mail.gmail.com > <https://groups.google.com/d/msgid/marpa-parser/CA%2B2Wrv9sG3wtFaUS8_k8fiLckUTAuDS3nrwTmddDUG0CU9x%2BbA%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > -- 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]. To view this discussion on the web visit https://groups.google.com/d/msgid/marpa-parser/CAK267fCKwFAnJ1APHKkyD-oh1SbCaLwV8aFhJ2Y2VseZcJNJkg%40mail.gmail.com.
