我目前正在将我的一个有趣的项目转移到 bison/flex 作为解析器,并且在解决减少/减少冲突时遇到了麻烦:
// https://github.com/X39/yaoosl/blob/master/code-gen/yaoosl.y#L761-L766
ifthen: YST_IF YST_ROUNDO expression code_ifstart YST_ROUNDC codebody code_ifendnoelse
| YST_IF YST_ROUNDO expression code_ifstart YST_ROUNDC ifthen_clsd YST_ELSE code_ifelse ifthen code_ifendelse
;
ifthen_clsd: codebody
| YST_IF YST_ROUNDO expression code_ifstart YST_ROUNDC ifthen_clsd code_ifelse YST_ELSE ifthen_clsd code_ifendelse
;
注意:以 code_ 为前缀的东西是中间动作
有人可以向我解释如何正确解决这个问题以及为什么“首选”解决方案是错误的或不起作用?谢谢,X39