我写了一个flex / Bison语法,它完美地运行到某一点。 但是当我添加一个带有新语法规则的新非终端时 - 无论哪一个我得到以下警告:警告:规则在语法中没用[-Wother]
当我将相同的规则移动到不同的非终端时它工作正常。 这就像我不能再添加任何非终端。
这是代码中不起作用的部分:
%type<number> expression
%type<arr> array
array:
'[' expression ']' { cout << "SUCCESS" << endl; }
;
expression:
NUMBER { $$ = $1; }
;
所有类型都在联盟中预定义,我一直在尝试更改规则/非终端顺序。什么都行不通。 请帮忙,因为我无法弄清楚问题是什么!
答案 0 :(得分:2)
如果规则生成的非终结符号不是某个(有用的)生成的起始符号或右侧,则该规则无效。
所以你不能只添加一个新的非终端,除非你也在某处使用它。
这可能不是你的问题 - 问题中的信息太少,无法说明你的问题是什么 - 但它至少与所提供的信息一致。