Bison 如何摆脱野牛的警告?
我在我的项目中得到了很多警告。以下是我语法文件的一个摘录:Bison 如何摆脱野牛的警告?,bison,yacc,Bison,Yacc,我在我的项目中得到了很多警告。以下是我语法文件的一个摘录: stmtlist : stmt ';' { printf(".."); } | stmtlist stmt ';' { printf(".."); } ; 行->警告:未使用的值:$1 行->警告:未使用的值:$2 问题是我不想使用1美元和2美元。有没有比用“-Wno other”称呼野牛更好的方法来消除这些警告 我还收到警告,在某些规则中未设置$$。我如何解决这个问题?我是否应该始终将$$设置
stmtlist : stmt ';' { printf(".."); }
| stmtlist stmt ';' { printf(".."); }
;
我还收到警告,在某些规则中未设置$$。我如何解决这个问题?我是否应该始终将$$设置为一个值?如果我有清理解析堆栈并执行某些操作的规则,该怎么办。$$总是在解析堆栈上放一个新值,对吗?好吧,有计算的值而不使用是一种代码味道。拥有未设置然后使用的值肯定是一个问题。将二者结合起来,您可以得到有时设置、有时未初始化、有时使用的值,这只是一个等待发生的意外,如果不是一个彻底的错误的话 所以你需要弄清楚的是,为什么会有这些未使用和未初始化的东西?在您的示例中,您似乎已为
stmt
声明了%type
,但未使用这些规则中的值。如果您从未使用过stmt
中的值,那么正确的做法是为它去掉%type
——这样它就没有值,因此bison不会警告您不要使用不存在的值
在设置$
的情况下--bison在减少规则时将$$
中的值推送到解析值堆栈上。因此,如果不设置$$
,这意味着它会推送垃圾。现在,如果忽略该垃圾(与上面的stmt
规则一样),则可以,但如果使用该值,则可能会出现问题
因此,在这种情况下,您可以通过删除不需要的%type
声明来修复警告——如果您所做的是为某些非终端声明值类型,但不设置值(导致警告)而不使用值(导致另一个警告).facepalm我为我不使用的非终端符号定义了一个%类型。删除此,将删除警告。。。谢谢克里斯!!!