为ANTLR语法添加异常处理

时间:2012-06-18 00:35:07

标签: antlr

当我有语法时,例如

interpret
 : (op ';')*
 ;

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

我问这个因为规则调用使用给定SQL-database-connection的方法,所以我必须添加声明。

public final void op() throws RecognitionException {

我想在构建antlr生成的文件(Lexer,Parser)时自动添加SQLExceptionClassNotFoundException

此致 redstreak

1 个答案:

答案 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'功能

试一试。