1
我看答案How to get ANTLR 3.2 to exit upon first error?这是有帮助的。ANTLR语法 - 如何添加成员覆盖错误处理
不过,我似乎无法在没有我的语法吓坏了添加这些“@”的规则。我的语法文件很简单:
grammar Exp;
options {
output=AST;
}
program
: includes decls (procedure)* main -> ^(SMALLCPROGRAM includes decls (procedure)* main) //AST - PROGRAM root
;
//Lexer and Parser rules continue below as normal..tested thoroughly and works
但是,如果我尝试添加任何这些@规则,我得到的错误,如:
grammar file Exp.g has no rules
和:
Exp.g:0:1: syntax error: assign.types: org.antlr.runtime.EarlyExitException
org\antlr\grammar\v3\DefineGrammarItemsWalker.g: node from line 202:4 required (...)+ loop did not match anything at input ';'
任何人都有一个想法是什么问题?我只是想改变我的语法,这样当我从单独的主类(使用ANTLRStringStream等将输入传入它)中运行它时,它实际上会在出现语法问题时在主类中引发错误,而不仅仅是说类似:
line 1:57 missing RPAREN at '{'
在继续解析其余的输入罚款之前。最终,我的主类应该拒绝解析由我的语法定义的任何语法错误的输入,并应将错误报告给用户。
谢谢。有效。我在另一个问题的覆盖中添加了,我的主类现在可以捕获异常。然而抛出的异常是不是非常丰富: MismatchedTokenException异常(18 = 49!) 我怎样才能得到: 线在1:57缺少RPAREN '{' 消息?有没有办法从覆盖中“提取”它或以不同的方式来覆盖? – Awoken 2013-02-14 18:56:06
@Awoken,这里没有银弹。检查异常,进行相应的转换并从异常中提取想要的信息。尽管如此,我们不要将这些小型评论框用于广泛的问答。 – 2013-02-14 19:08:45