我收到此消息“语法无用规则”

时间:2019-07-08 10:10:52

标签: bison

我是野牛新手。我写了一些规则,但是我得到了很多“语法上无用的规则”。

我认为“ expr”会导致此问题。请帮助我。

image of result

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     
;

1 个答案:

答案 0 :(得分:1)

问题在于statement仅具有递归规则。这使得statement无法在派生中使用,因为任何以statement开头的派生都不会终止。

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

您可能希望statement拥有其他非递归替代项,例如expr