我一直在盯着我的代码一段时间,我不知道如何解决这个问题。我使用调试器来找到问题,但我不明白错误。
number_constant : integer
| SUBTRACT integer
| SUBTRACT integer PERIOD integer
| integer PERIOD integer
;
digit : INTEGER
;
integer : digit
| integer digit
;
这是输出告诉我冲突的两个状态
state 38
36 number_constant: integer .
40 decimal_constant: integer . PERIOD integer
46 integer: integer . digit
INTEGER shift, and go to state 6
PERIOD shift, and go to state 55
PERIOD [reduce using rule 36 (number_constant)]
$default reduce using rule 36 (number_constant)
digit go to state 56
------------------
state 46
37 number_constant: SUBTRACT integer .
39 decimal_constant: SUBTRACT integer . PERIOD integer
46 integer: integer . digit
INTEGER shift, and go to state 6
PERIOD shift, and go to state 65
PERIOD [reduce using rule 37 (number_constant)]
$default reduce using rule 37 (number_constant)
digit go to state 56
整个输出:http://pastebin.com/bUxYZeHr
提前致谢
答案 0 :(得分:1)
你的语法包括
27 term: value
28 | value PERIOD term
29 | value DIVIDE term
value
可以是integer
而term
可以是value
,因此integer PERIOD integer
可以是decimal_constant
或{ {1}}。
唯一可能的决议是消除歧义。什么是term
应该是什么意思?
答案 1 :(得分:0)
在我看来,你正在做我的编译器课程。我最好来上课/实验室并向我寻求帮助,而不是在你可以更快地直接获得它时询问stackoverflow!
实际问题,我相信你现在已经找到了;当你的作业已经交付时,有些工作是在flex中的词法分析器中完成的,有些是在野外的解析器中完成的。 flex中的令牌INTEGER包含所有数字,并且在bison中不应该有一个数字序列的规则。