3

当我调用一个语法时,例如

interpret
 : (op ';')*
 ;

是否可以添加类似的 throw 子句throws SQLException?每次我用 ANTLR 编译语法时,我的 Parser 都会抛出错误,因为我没有在具体方法中添加任何 throw 子句。

我问这是因为规则调用使用给定 SQL 数据库连接的方法,所以我必须添加声明。

public final void op() throws RecognitionException {

我想添加SQLExceptionClassNotFoundException自动构建 antlr 生成的文件(Lexer、Parser)。

问候,红线

4

1 回答 1

4

ANTLR 参考手册的第 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”功能

试一试。

于 2012-06-18T08:34:48.010 回答