我的编译器类有一个解析器项目。我无法解决其中一条规则的减少/减少冲突。
此语法规则的图形表示可在此链接中找到(抱歉,由于 stackoverflow 策略,我无法在此处发布图像):
所有椭圆都是终端符号。
由于这条规则看起来有点复杂,我试着把它分解成更小的部分。这是我构建语法的尝试:
type : id_or_int brackets_or_end
;
id_or_int : IDnum
| INTnum
;
brackets_or_end : brackets remainingpartboe
|
;
brackets : LBRACnum RBRACnum brackets
|
;
remainingpartboe: DOTnum type
|
;
请注意,终端是以后缀 num 结尾的单词,例如 DOTnum。其余是非终结符。
Bison 报告以下冲突
mj-parser.y: conflicts: 1 reduce/reduce
mj-parser.y:122.18: warning: rule useless in parser due to conflicts:
brackets_or_end: /* empty */
请注意,上面的野牛错误是指第二个替代产生的括号_or_end 规则。
请通过建议另一种编写语法的方法来帮助解决此冲突。顺便说一句,我查看了 Bison 的详细输出,但没有太大帮助。
谢谢-sas