野牛无用无期

时间:2016-03-19 14:25:27

标签: bison

σ我正在尝试创建一个简单的野牛示例。我已经从我的.l文件中定义了操作的值,但是当我尝试对-d检查冲突时,expr与stmt没有任何关联,因此bison只识别我写的第一个东西,即使我在stmt的开头有一个“expr SEMICOLON”。我也在状态0中减少/减少冲突。任何想法?

program: state
    |;

state: expr SEMICOLON
  | BREAK SEMICOLON
  | CONTINUE SEMICOLON 
  |;

expr: expr "+" expr
| expr "-" expr
| expr "*" expr
| expr "/" expr
| expr "%" expr
;

1 个答案:

答案 0 :(得分:1)

expr的所有案例都是递归的,因此expr无法匹配任何输入。您需要一个基本案例(例如NUM和/或ID)。

减少/减少冲突的原因是programstmt都有空案例。因此stmt也是program的案例之一,因此有两种可能的路径来从programprogram -> stmt -> ""program -> "")派生空字符串。所以你需要删除其中一个空案例。