Go 1.5和1.6中yacc的向后兼容性

时间:2016-03-30 06:50:51

标签: go yacc backwards-compatibility

  

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后,代码运行良好。

1 个答案:

答案 0 :(得分:0)

您很可能会看到this commit中所做的更改。但根据您应该使用$$VAL(即yyVAL)的代码。在Go 1.6中,同样的值也可以通过$$rcvr.lval访问。

Anywho,很高兴你解决了它。

编辑:

为了澄清,我推测即使在Go 1.5或更低版本中,我们也应该使用yyVAL而不是yylval。因此,我暗示您在问题中链接的文档可能是错误的并且错误就在那里。但是你是100%正确的,如果不是这样,那么Go 1承诺就会被破坏,应该纠正。