ANTLRWorks 警告 'no start rule'

标签 antlr antlr3 antlrworks

请帮助新手理解这一点
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/

相关文章:

recursion - 如何消除左递归

java - ANTLR:处理表情符号字符

c++ - LL(*) 解析器(如antlr3)可以解析C++吗?

java - 永远无法达到以下替代方案 : 2

java - 在 Antlr 3 中生成自定义 JavaDoc

c - Antlr 4解析大型c文件需要永远

antlr - ANTLR 解析器/词法分析器中的可选前缀

c# - 错误 - 词法分析器规则 'xxxx' 中的操作必须是单个最外层 alt 的最后一个元素

java - 如何预测和避免 "code too large"?