Lex应返回令牌标识符,并放置其他令牌 lval中的信息(取代通常的yylval)。
以上文字取自go document.
我在yacc文件(some.y文件)中的语法规则的操作部分中使用了变量(yylval)。该代码在Go 1.5中有效。但是相同的代码并没有在Go 1.6中编译。当我检查生成的y.go文件时(来自'去yacc工具some.y'命令),Go会在不同的版本中创建不同的变量名。
var yylval yySymType //in G0 1.5
var yyVAL yySymType //in Go 1.6
这是否反对向后兼容?或者Go不保证变量的向后兼容性?或者yylval变量的使用是错误的吗?
使用yyVAL替换varibale名称yylval后,代码运行良好。
答案 0 :(得分:0)
您很可能会看到this commit中所做的更改。但根据您应该使用$$VAL
(即yyVAL
)的代码。在Go 1.6中,同样的值也可以通过$$rcvr.lval
访问。
Anywho,很高兴你解决了它。
编辑:
为了澄清,我推测即使在Go 1.5或更低版本中,我们也应该使用yyVAL
而不是yylval
。因此,我暗示您在问题中链接的文档可能是错误的并且错误就在那里。但是你是100%正确的,如果不是这样,那么Go 1承诺就会被破坏,应该纠正。