Hi Akim, A
I'm using 2.4 but have checked this with 2.7. Can you be more specific on how to trace the location without using the yyerror define and the "yylval" field? Hm, don't know what happened to the patch, but it's simple - add a yystackp parameter to "reportAmbiguity" function and the coressponding argument to its call. Thanks. A 15.12.2012, 11:25, "Akim Demaille" <[email protected]>: Hi Slava, Le 14 dA(c)c. 2012 A 18:49, Slava Savitsky <[1][email protected]> a A(c)crit : A A A Here's a problem: for a grammar with both %glr-parser and %pure-parser A A A declarations a location-aware error reporting function cannot be used. A A A Usually to track the error position one defines "yyerror(msg)" to A A A "print_error(message, &yylval, yychar)", right? In the pure parser A A A "yylval" becomes "yystackp->yylval". The problem is, yyerror(YY_(msg)) A A A is called from the "reportAmbiguity" function which does not take the A A A "yystackp" argument. Do not use the #define yyerror hack, it is brittle. A Just do not #define it, and let Bison do its job. A The test suite does check glr + pure + location, so it is expected to work properly. A See your documentation (you did not specify the version of Bison) about pure parsers. A A A A possible fix would be: A A A --- /usr/share/bison/glr.cssss 2012-12-14 20:07:40.516065313 +0400 A A A +++ /usr/share/bison/glr.csss 2012-12-14 19:49:35.600065872 +0400 A A A @@ -1788,8 +1788,7 @@ A A A s#endif A A A s A A A s/*ARGSUSED*/ static YYRESULTTAG A A A -yyreportAmbiguity (yyGLRStack* yystackp, A A A -ssssssssssssssssss yySemanticOption* yyx0, A A A +yyreportAmbiguity (yySemanticOption* yyx0, A A A ssss sss ss yySemanticOption* yyx1]b4_pure_formals[) A A A s{ A A A ss YYUSE (yyx0); A A A @@ -1900,7 +1899,7 @@ A A A ssss sss { A A A ssss sss case 0: A A A ssss sssss yyresolveLocations (yys, 1, yystackp]b4_user_args[); A A A -sss sssss return yyreportAmbiguity (yystackp, yybest, A A A yyp]b4_pure_args[); A A A +sss sssss return yyreportAmbiguity (yybest, yyp]b4_pure_args[); A A A ssss sssss break; A A A ssss sss case 1: A A A ssss sssss yymerge = yytrue; A A A Slava Savitskiy. FWIW, I don't know what happened here, but the patch was damaged. References 1. mailto:[email protected]
