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

Bison中因空规则导致的移进/归约冲突问题解决

无优先级解决Bison移进/归约冲突的语法重写

原语法的冲突根源在于:B和E的组合定义等价于一个或多个D(B: D | D D | ...),而A的a B C分支中,语法分析器遇到a后的D序列时,无法判断是继续移进下一个D(因为E可以递归扩展),还是归约当前D序列为B以处理后续的C(即error),由此产生移进/归约冲突。

不依赖优先级规则的重写方案,核心是扁平化递归结构,明确分支的语法结构,消除歧义:

%token a

%start A
%% 

A: a D_LIST error | /* empty */
;
// 定义一个或多个D的序列
D_LIST: D 
      | D_LIST D
;
D: error
;

重写后,D_LIST直接表示一个或多个D,A的a分支明确要求a后紧跟任意数量的D,再衔接error(对应原语法的C)。语法分析器不再需要做二选一的判断,冲突自然消除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 11:20:28