野牛:没有理由得到语法错误

时间:2015-11-26 18:22:53

标签: bison yacc flex-lexer

我写了一个flex / Bison语法,它完美地运行到某一点。 但是当我添加一个带有新语法规则的新非终端时 - 无论哪一个我得到以下警告:警告:规则在语法中没用[-Wother]

当我将相同的规则移动到不同的非终端时它工作正常。 这就像我不能再添加任何非终端。

这是代码中不起作用的部分:

%type<number> expression
%type<arr> array
array:
    '[' expression ']'                  { cout << "SUCCESS" << endl; }
    ;           
expression: 
    NUMBER                              { $$ = $1; }
    ;

所有类型都在联盟中预定义,我一直在尝试更改规则/非终端顺序。什么都行不通。 请帮忙,因为我无法弄清楚问题是什么!

1 个答案:

答案 0 :(得分:2)

如果规则生成的非终结符号不是某个(有用的)生成的起始符号或右侧,则该规则无效。

所以你不能只添加一个新的非终端,除非你也在某处使用它。

这可能不是你的问题 - 问题中的信息太少,无法说明你的问题是什么 - 但它至少与所提供的信息一致。