当我试图运行.y文件时,我遇到了这个问题
Phase2.y:119.10-26: warning: type clash on default action: <symp> != <>
.y文件中的第119行
`
factor : LPAREN exp RPAREN
| INT_LITERAL {
strcpy($$.type ,"int");
strcpy($$.name,"");
}`
当我试图寻找一些帮助的东西时,我看到了简单的解释,但对我来说还不清楚。
有什么帮助吗?谢谢
...
发布于 2022-11-01 22:36:59
该规则包含两个结果。第一个产品没有语义操作,因此使用默认操作。默认操作是{ $$ = $1; }
Bison试图验证默认操作的类型是否正确。在本例中,$$是factor,您可能已经将其声明为%type <symp> factor。$1是LPAREN,您可能已经声明为非类型化令牌(即没有语义值的令牌)。这两个声明都是正确的,但这意味着$$ = $1;是胡说八道;您不能从非值分配$$。
您可能打算使用expr作为第一个产品的值。这是$2,因为expr是产品右侧的第二个符号.(您也可以将其编写为$expr,这可能更清楚。)
因此,该规则应改为:
factor : LPAREN exp RPAREN { $$ = $2; }
| INT_LITERAL {
strcpy($$.type ,"int");
strcpy($$.name,"");
}但是,第二个产品的语义操作忽略了INT_LITERAL令牌的值,这似乎不太可能是正确的。
https://stackoverflow.com/questions/74275570
复制相似问题