首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ANTLRWorks警告“无启动规则”

ANTLRWorks警告“无启动规则”
EN

Stack Overflow用户
提问于 2013-06-11 14:09:42
回答 2查看 3.1K关注 0票数 4

请帮助新手理解ANTLWorks中的此警告:

11:10:15警告(138):BooleanExpr.g:0:1:语法BooleanExpr:无开始规则(没有任何规则可明显遵循EOF)

以下是我语法的定义:

代码语言:javascript
复制
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'+;

非常感谢!

EN

回答 2

Stack Overflow用户

发布于 2014-12-12 11:39:17

任何语法都需要所谓的开始规则。开始规则是另一条规则不引用的规则。如果语法没有这样的规则,ANTLR生成器将发出警告:

代码语言:javascript
复制
no start rule (no rule can obviously be followed by EOF)

为了避免这种情况,在语法中添加一个虚拟的开始规则:

代码语言:javascript
复制
start_rule: someOtherRule; 
票数 3
EN

Stack Overflow用户

发布于 2013-06-11 14:56:14

通常,编写解析器是为了解析整个输入(从文件开始到结束)。用于此任务的语法通常包括如下规则。

代码语言:javascript
复制
compilationUnit : someElement* EOF;

这个规则说编译单元是一个零个或多个元素的序列,结束于文件的末尾。如果省略了EOF引用,则可以有如下规则。

代码语言:javascript
复制
compilationUnit : someElement*;

这个表单的问题在于它的错误处理能力。如果输入包含语法错误,则该规则将直接返回(空序列是对此compilationUnit规则的有效解释,而不是包含无效元素的较长序列),而不是尝试更正和/或恢复。

ANTLRWorks告诉您语法不包含以显式EOF引用结尾的规则,如果您打算解析完整的文件,这可能会有问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17046238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档