我的编译器类有一个解析器项目 . 我无法解决其中一条规则的减少/减少冲突 .
此链接中提供了此语法规则的图形表示(抱歉,由于stackoverflow策略,我无法在此处发布图像):
Graphical representation of the "type" grammar rule
所有椭圆形都是终端符号 .
由于这条规则看起来有点复杂,我试图把它分解成更小的部分 . 这是我构建语法的尝试:
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 */
请注意,上面的bison错误指的是bracket_or_end规则的第二个替代 生产环境 .
请通过建议另一种编写语法的方法来帮助解决这一冲突 . 顺便说一句,我看过Bison的详细输出,但它没有多大帮助 .
谢谢--sas
1 回答
(问题在评论中回答 . 转换为社区维基答案 . 见Question with no answers, but issue solved in the comments (or extended in chat))
@BobDalgleish写道:
OP写道: