将异常处理添加到ANTLR语法
当我有一个语法叫做将异常处理添加到ANTLR语法,antlr,Antlr,当我有一个语法叫做 interpret : (op ';')* ; 是否可以添加抛出子句,如抛出SQLException?每次我用ANTLR编译语法时,我的解析器都会抛出错误,因为我没有向具体方法添加任何抛出子句 我这样问是因为规则调用使用给定SQL数据库连接的方法,所以我必须添加声明 public final void op() throws RecognitionException { 我想在构建antlr生成的文件(Lexer、解析器)时自动添加SQLException和Class
interpret
: (op ';')*
;
是否可以添加抛出子句,如抛出SQLException
?每次我用ANTLR编译语法时,我的解析器都会抛出错误,因为我没有向具体方法添加任何抛出子句
我这样问是因为规则调用使用给定SQL数据库连接的方法,所以我必须添加声明
public final void op() throws RecognitionException {
我想在构建antlr生成的文件(Lexer、解析器)时自动添加SQLException
和ClassNotFoundException
问候,,
第24页上的红条纹写着:
指定解析器(或树解析器规则)可以引发
非特定于ANTLR的异常,请使用exceptions子句。例如
下面是一个简单的解析器规范,其中包含一个抛出
我的例外:
这似乎在早期版本中没有实现:
幸运的是,在报告中,它说:
为Java目标实现解析器规则的“throwsSpec”特性
试试看。谢谢,在antlr-3.2中,它对我不起作用,所以正如你告诉我的,我添加了antlr-3.4。作为一般的自由党,一切都很好。谢谢:)提醒一下:如果答案解决了你的问题,你可以点击左边的复选标记来接受答案。如果答案有用的话,你也可以点击左边的向上箭头来向上投票。谢谢,我检查了标记,但我无法向上推箭头,因为我的声誉根本不是15:(没问题,你不需要向上投票。我只是想澄清它是如何工作的。
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);
}
}