【发布时间】:2019-08-26 06:42:31
【问题描述】:
试图了解班次减少冲突并解决它们。
我有以下 YACC 代码,我预计会为此发生 shift-reduce 冲突,但 Bison 不会生成任何此类警告
%%
lang_cons: /* empty */
| declaraion // SEMI_COLON
| func
;
declaraion : keyword ID
;
func : keyword ID SEMI_COLON
;
keyword : INT
| FLOAT
;
%%
但如果我在第二条规则中取消注释 SEMI_COLON(即 | declaraion SEMI_COLON ),我会遇到移位减少冲突。在这种情况下,我期待减少减少冲突。请帮我理解这个烂摊子!
PS:考虑输入,
1) int varName
2) int func;
【问题讨论】:
-
您能否指出您期望哪个班次与哪个 reduce 发生冲突,以及您期望与哪两个 reduce 发生冲突?
-
当 SEMI_COLON 是前瞻标记时,堆栈将具有(关键字和 ID)足以通过规则“声明”或“功能”减少
标签: c parsing bison yacc shift-reduce-conflict