当我有语法时,例如
interpret
: (op ';')*
;
是否可以添加throws SQLException
之类的throw子句?每次我使用ANTLR编译Grammer时,我的Parser都会抛出错误,因为我没有在具体方法中添加任何throw子句。
我问这个因为规则调用使用给定SQL-database-connection的方法,所以我必须添加声明。
public final void op() throws RecognitionException {
我想在构建antlr生成的文件(Lexer,Parser)时自动添加SQLException
和ClassNotFoundException
。
此致 redstreak
答案 0 :(得分:3)
在ANTLR Reference Manual的第24页,它说:
指定您的解析器(或树解析器规则)可以抛出一个 非ANTLR特定异常,使用exceptions子句。例如, 这是一个简单的解析器规范,其中包含一个抛出的规则 MyException:
class P extends Parser;
a throws MyException
: A
;
ANTLR generates the following for rule a:
public final void a()
throws RecognitionException,
TokenStreamException,
MyException
{
try {
match(A);
}
catch (RecognitionException ex) {
reportError(ex);
consume();
consumeUntil(_tokenSet_0);
}
}
似乎在早期版本中没有实现:throwing non-antlr exceptions 幸运的是,在ANTLR 3.4 Release Notes中,它说:
为Java目标实现解析器规则的'throwsSpec'功能
试一试。