我收到这条消息“规则在语法中无用”

I get this message'rule useless in grammar'

我是 Bison 的新手。我写了一些规则,但我得到了很多 'rule useless in grammar'.

我认为 'expr' 导致了这个问题。请帮助我。

File : 
| class {printf("accepted");}
; 
class : CLASS IDENT '{' function  '}'
| CLASS IDENT '{'  global '}'
;
global : data_type IDENT 
;
function : 
|data_type IDENT'('Params')' '{'statement'}'
|VOID IDENT'('Params')' '{'statement'}'
;
Params : data_type IDENT 
| data_type IDENT',' Params
;
data_type : INT_T 
|DOUBLE_T
|BOOL_T 
|VOID;
;       
statement : WHILE '(' expr')'  statement  
| FOR'('data_type IDENT '=' expr ';' expr ';' expr')'  statement 
;   
expr:   expr COMP expr
|expr '=' expr
|INT_T
|BOOL_T     
;

问题是 statement 只有递归规则。这使得 statement 无法在推导中使用,因为任何以 statement 开头的推导都不会终止。

因为 statement 不能用于解析任何有限字符串,bison 从语法中删除它及其所有规则,以及任何使用 statement 的规则。删除这些规则后,exprParams 不再在语法中引用,因此它们也被标记为无用。

您可能打算 statement 使用其他 non-recursive 替代方案,例如 expr