将异常处理添加到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);
  }
}