首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >警告:在默认操作上键入clash:<symp> != <>

警告:在默认操作上键入clash:<symp> != <>
EN

Stack Overflow用户
提问于 2022-11-01 11:57:17
回答 1查看 33关注 0票数 0

当我试图运行.y文件时,我遇到了这个问题

Phase2.y:119.10-26: warning: type clash on default action: <symp> != <>

.y文件中的第119行

`

代码语言:javascript
复制
factor : LPAREN exp RPAREN
       | INT_LITERAL {
            strcpy($$.type ,"int");
strcpy($$.name,"");
    
}

`

当我试图寻找一些帮助的东西时,我看到了简单的解释,但对我来说还不清楚。

有什么帮助吗?谢谢

...

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-01 22:36:59

该规则包含两个结果。第一个产品没有语义操作,因此使用默认操作。默认操作是{ $$ = $1; }

Bison试图验证默认操作的类型是否正确。在本例中,$$factor,您可能已经将其声明为%type <symp> factor$1LPAREN,您可能已经声明为非类型化令牌(即没有语义值的令牌)。这两个声明都是正确的,但这意味着$$ = $1;是胡说八道;您不能从非值分配$$

您可能打算使用expr作为第一个产品的值。这是$2,因为expr是产品右侧的第二个符号.(您也可以将其编写为$expr,这可能更清楚。)

因此,该规则应改为:

代码语言:javascript
复制
factor : LPAREN exp RPAREN { $$ = $2; }
       | INT_LITERAL {
            strcpy($$.type ,"int");
            strcpy($$.name,"");   
         }

但是,第二个产品的语义操作忽略了INT_LITERAL令牌的值,这似乎不太可能是正确的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74275570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档