You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行.y文件遇type clash警告:<symp> != <>求解决方案

解决YACC/Bison的"type clash on default action"警告

这个警告的核心原因是产生式的默认动作类型不匹配:

  • YACC/Bison会给没有显式写动作的产生式自动添加默认动作:$$ = $1;,也就是把第一个符号的类型赋值给当前非终结符的类型。
  • 你的factor非终结符在第二个产生式里被定义为symp结构体类型(因为你操作了$$.type和$$.name),但第一个产生式factor : LPAREN exp RPAREN没有写动作,默认会把$1(LPAREN的类型,一般是int型的token值)赋值给$$,这就导致了<symp>和<>(int类型)的类型冲突。

修复方案

给第一个产生式加上明确的动作,把exp的结果赋值给factor,确保两个产生式的$$类型一致:

factor : LPAREN exp RPAREN { $$ = $2; }
       | INT_LITERAL {
            strcpy($$.type ,"int");
            strcpy($$.name,"");
       }

这样默认动作被覆盖,两个产生式都返回symp类型,警告就会消失。

内容的提问来源于stack exchange,提问作者rema

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:10:57