请帮助新手理解ANTLWorks中的此警告:
11:10:15警告(138):BooleanExpr.g:0:1:语法BooleanExpr:无开始规则(没有任何规则可明显遵循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'+;非常感谢!
发布于 2014-12-12 11:39:17
任何语法都需要所谓的开始规则。开始规则是另一条规则不引用的规则。如果语法没有这样的规则,ANTLR生成器将发出警告:
no start rule (no rule can obviously be followed by EOF)为了避免这种情况,在语法中添加一个虚拟的开始规则:
start_rule: someOtherRule; 发布于 2013-06-11 14:56:14
通常,编写解析器是为了解析整个输入(从文件开始到结束)。用于此任务的语法通常包括如下规则。
compilationUnit : someElement* EOF;这个规则说编译单元是一个零个或多个元素的序列,结束于文件的末尾。如果省略了EOF引用,则可以有如下规则。
compilationUnit : someElement*;这个表单的问题在于它的错误处理能力。如果输入包含语法错误,则该规则将直接返回(空序列是对此compilationUnit规则的有效解释,而不是包含无效元素的较长序列),而不是尝试更正和/或恢复。
ANTLRWorks告诉您语法不包含以显式EOF引用结尾的规则,如果您打算解析完整的文件,这可能会有问题。
https://stackoverflow.com/questions/17046238
复制相似问题