野牛 - 无法解决减少冲突的问题

时间:2016-06-23 17:21:25

标签: bison reduce-reduce-conflict

我尝试了一些我在这里找到的解决方案,但它没有用(可能是因为我错误地应用了它们)。 这是我的一些语法:

Program: Marker1 PROGRAM DECLARATIONS STATEMENTS END    
;

DECLARATIONS:  DECLARATION SEMICOLON
             | DECLARATION SEMICOLON DECLARATIONS
;


DECLARATION: Marker2 VARIABLES_LIST COLON TYPE
;

STATEMENTS: STATEMENT Stmnt
;
Stmnt:  SEMICOLON STATEMENTS    
|   %empty
;
//More rules that include "STATEMENT" and "VARIABLES_LIST"

虽然COLONPROGRAMSEMICOLONEND定义为%token(实际上只是单词)。 我收到以下警告:

Source.ypp: warning: 1 reduce/reduce conflict [-Wconflicts-rr]

我尝试应用其他线程的解决方案,但我无法编译,我明白是什么导致它但我无法弄清楚如何解决这个问题。

显然优先权在这里没有帮助,我需要改变我的语法,但是如何在不破坏我所有规则的情况下正确地改变它(我有比我在这里显示的规则更多的规则 - {{3} })?

** P.S:我没有使用YACC

编辑: 这是冲突的状态:

State 15

    4 DECLARATIONS: DECLARATION SEMICOLON .
    5             | DECLARATION SEMICOLON . DECLARATIONS

    ID        reduce using rule 4 (DECLARATIONS)
    ID        [reduce using rule 6 ($@1)]
    $default  reduce using rule 4 (DECLARATIONS)

    DECLARATIONS  go to state 32
    DECLARATION   go to state 6
    $@1           go to state 7

以下是规则6和4:

4 DECLARATIONS: DECLARATION SEMICOLON
5             | DECLARATION SEMICOLON DECLARATIONS

6 $@1: %empty

7 DECLARATION: $@1 VARIABLES_LIST COLON TYPE

0 个答案:

没有答案