Lex should return the token identifier, and place other token information in lval (which replaces the usual yylval).
The above text taken from the go document.
I used the variable(yylval) in the action part of grammar rules in the yacc file(some.y file). The code worked in Go 1.5. But the same code didn't compile in Go 1.6. When I checked the generated y.go file(from the 'go yacc tool some.y' command), Go creates different variable names in different version.
var yylval yySymType //in G0 1.5
var yyVAL yySymType //in Go 1.6
Is this against backward compatibility? or Go doesn't guarantee backward compatibility for the variable? or Is usage of yylval variable is wrong?
Code worked well after replacing the varibale name yylval with yyVAL.
You are most probably seeing the changes made in this commit. But according to the code you were supposed to be using $$VAL
(i.e. yyVAL
) all along. In Go 1.6 the same value should be accessible through $$rcvr.lval
as well.
Anywho, glad you solved it.
Edit:
To clarify, I presume that even in Go 1.5 or lower we were supposed to use yyVAL
and not yylval
. In consequence, I am implying that the documentation you linked in your question is probably wrong and the bug lays there. However you are 100% correct that if this is not the case, then the Go 1 promise was broken and it should be rectified.