请帮助新手理解这一点
ANTLWorks 中的警告:
[11:10:15] warning(138): BooleanExpr.g:0:1: grammar BooleanExpr: no start rule (no rule can obviously be followed by EOF)
这就是我的语法定义的样子:
grammar BooleanExpr;
booleanExpr
: andExpr ('OR' andExpr)*;
andExpr : notExpr (('AND' | ' ' ) notExpr)*;
notExpr : kppExpr ('NOT' kppExpr);
kppExpr : keywordExpr|phraseExpr|proximityExpr|'(' booleanExpr ')';
keywordExpr
:CHAR+;
phraseExpr
: '"' keywordExpr '"';
proximityExpr
: keywordExpr|phraseExpr '~' INT;
CHAR : ('A'..'Z') | ('a'..'z');
INT : '0'..'9'+;
非常感谢!
最佳答案
任何语法都需要所谓的开始规则。开始规则是未被其他规则引用的规则。如果你的语法没有这样的规则,ANTLR 生成器会发出警告:
no start rule (no rule can obviously be followed by EOF)
为了避免它,在你的语法中添加一个虚拟的开始规则:
start_rule: someOtherRule;
关于ANTLRWorks 警告 'no start rule',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17046238/