繁体   English   中英

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

[英]backward compatibility for yacc in Go 1.5 and 1.6

Lex应该返回令牌标识符,并将其他令牌信息放入lval(代替通常的yylval)。

以上文字摘自go 文档。

我在yacc文件(some.y文件)的语法规则的操作部分中使用了变量(yylval)。 该代码在Go 1.5中有效。 但是同一代码在Go 1.6中没有编译。 当我检查生成的y.go文件(通过'go yacc tool some.y'命令)时,Go在不同版本中创建了不同的变量名称。

var yylval yySymType //in G0 1.5
var yyVAL yySymType //in Go 1.6

这是向后兼容吗? 或Go不能保证该变量的向后兼容性? 或yylval变量的用法是否错误?

用yyVAL替换varibale名称yylval后,代码运行良好。

您最有可能看到此提交中所做的更改。 但是根据代码,您应该一直使用$$VAL (即yyVAL )。 在Go 1.6中,也应通过$$rcvr.lval访问相同的值。

任何人,很高兴您解决了这个问题。

编辑:

为了澄清,我假设即使在Go 1.5或更低版本中,我们也应该使用yyVAL而不是yylval 因此,我的意思是,您在问题中链接的文档可能是错误的,并且错误存在于此。 但是,如果不是这种情况,那么您100%正确,那就是Go 1承诺被破坏了,应该纠正它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM