转移/减少Bision中的冲突

时间:2015-04-25 07:05:56

标签: bison

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

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州的转变减少。有人可以解释转移减少冲突的原因吗?

1 个答案:

答案 0 :(得分:1)

一个问题是feature_list的含糊不清。单个要素是feature_list(生产7)还是空feature_list(6),后跟要素(8)?

formal_list的定义也会接受一些意外的字符串(例如以逗号开头的列表)。

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