Shift/Reduce 视觉冲突

Shift/Reduce conflict in Bision

这就是我的语法现在的样子

Grammar

0 $accept: program $end

1 program: class_list

2 class_list: class
3           | class_list class

4 class: CLASS TYPEID '{' feature_list '}' ';'
5      | CLASS TYPEID INHERITS TYPEID '{' feature_list '}' ';'

6 feature_list: /* empty */
7             | feature
8             | feature_list feature

9 feature: OBJECTID '(' formal_list ')' ':' TYPEID '{' expr '}' ';'
10        | OBJECTID ':' TYPEID
11        | OBJECTID ':' TYPEID ASSIGN expr

12 formal_list: /* empty */
13            | formal
14            | formal_list ',' formal

15 formal: OBJECTID ':' TYPEID

16 expr: /* empty */

我正在状态 9 和 14 减少班次。有人可以解释什么是班次减少冲突吗?

一个问题是feature_list的歧义。单个特征是 feature_list(生产 7)还是空 feature_list (6) 后跟特征 (8)?

formal_list的定义也会接受一些意想不到的字符串(比如以逗号开头的列表)

在第一种情况下,您可以只删除产生式 7。对于 formal_list,您可以将 optional_formal_list 定义为空或 formal_list,然后删除 [= 的空产生式19=].