我收到这条消息“规则在语法中无用”
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
的规则。删除这些规则后,expr
和 Params
不再在语法中引用,因此它们也被标记为无用。
您可能打算 statement
使用其他 non-recursive 替代方案,例如 expr
。
我是 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
的规则。删除这些规则后,expr
和 Params
不再在语法中引用,因此它们也被标记为无用。
您可能打算 statement
使用其他 non-recursive 替代方案,例如 expr
。