Nevermind I figured that out
On Mon, Jun 3, 2013 at 4:01 PM, Adam Smalin <acidzombi...@gmail.com> wrote: > Could you give me a better example? I tried the below and neither helped. > I got the error > > Ambiguity detected. > Option 1, > mainLoop -> <Rule 5, tokens 1 .. 8> > mainLoop -> <Rule 5, tokens 1 .. 7> > mainLoop -> <Rule 5, tokens 1 .. 6> > mainLoop <tokens 1 .. 4> > mainElement -> <Rule 6, tokens 5 .. 6> > '$' <tokens 5 .. 5> > VarName <tokens 6 .. 6> > mainElement -> <Rule 7, tokens 7 .. 7> > mainElement2 -> <Rule 9, tokens 7 .. 7> > Token -> <Rule 10, tokens 7 .. 7> > '.' <tokens 7 .. 7> > mainElement -> <Rule 7, tokens 8 .. 8> > mainElement2 -> <Rule 8, tokens 8 .. 8> > VAR <tokens 8 .. 8> > > Option 2, > mainLoop -> <Rule 5, tokens 1 .. 8> > mainLoop <tokens 1 .. 4> > mainElement -> <Rule 6, tokens 5 .. 8> > '$' <tokens 5 .. 5> > VarName -> <Rule 12, tokens 6 .. 8> > VarName <tokens 6 .. 6> > '.' <tokens 7 .. 7> > VAR <tokens 8 .. 8> > > From both. Input is $a.b $a.b > > %% > program: mEOS main > main: | mainLoop mEOS > > mainLoop: > mainElement %dprec 5 > | mainLoop mainElement %dprec 4 > mainElement: > %nonassoc '$' VarName %dprec 6 { printf("varname\n"); } > | mainElement2 %dprec 1 > mainElement2: > > VAR %dprec 3 { printf("var\n"); } > | Token %dprec 2 { printf("token\n"); } > > Token: '.' %dprec 1 > VarName: VAR %dprec 7 > | VarName '.' VAR %dprec 8 > > EOS: '\n' | ';' > mEOS: | mEOS EOS > > ------ > > %right '$' '.' > %% > program: mEOS main > main: | mainLoop mEOS > mainLoop: > mainElement %prec 5 > | mainLoop mainElement %prec 4 > > mainElement: > '$' VarName %dprec 6 { printf("varname\n"); } > | mainElement2 %dprec 1 > mainElement2: > > VAR %dprec 3 { printf("var\n"); } > | Token %dprec 2 { printf("token\n"); } > > Token: '.' %dprec 1 > VarName: VAR %dprec 7 > | VarName '.' VAR %dprec 8 > > > > > On Mon, Jun 3, 2013 at 3:09 AM, Akim Demaille <a...@lrde.epita.fr> wrote: > >> >> Le 1 juin 2013 à 20:49, Adam Smalin <acidzombi...@gmail.com> a écrit : >> >> > I have another thread but here is a simple version of my problem >> > >> > My text input is >> > a.b c.d >> > What I would like is >> > varname varname >> > My grammar is >> > %glr-parser >> > //... >> > mainLoop: >> > mainElement %dprec 5 >> > | mainLoop mainElement %dprec 4 >> > mainElement: >> > '$' VarName %dprec 6 { printf("varname\n"); } >> > | VAR %dprec 3 { printf("var\n"); } >> > | Token %dprec 2 { printf("token\n"); } >> > >> > Token: '.' %dprec 1 >> > VarName: VAR %dprec 7 >> > | VarName '.' VAR %dprec 8 >> > >> > The conflict file shows >> > 6 mainElement: '$' VarName . [$end, VAR, '.', '$', '\n', ';'] >> > 11 VarName: VarName . '.' VAR >> > >> > '.' shift, and go to state 18 >> > >> > '.' [reduce using rule 6 (mainElement)] >> > $default reduce using rule 6 (mainElement) >> > >> > Now I see $default reduce. I'd like it to shift. I threw in a bunch of >> > precedence hoping something would trigger a shift instead of a reduce >> but >> > no. What can I do? >> >> You have a competition between r6, which wants to be reduced, >> and token '.', which wants to be shifted. r6 is "tagged" by >> '$', its rightmost token (use %prec to use another associativity >> / precedence carrier). So you have a competition between "$" and ".". >> To make the latter win, several choices: >> >> - use precedence (e.g., %nonassoc '$' %nonassoc '.') >> >> - use associativity (to promote shift, make it right >> associative: %right '$' '.'). >> >> HTH. > > > _______________________________________________ help-bison@gnu.org https://lists.gnu.org/mailman/listinfo/help-bison