antlr4如何使规则抛出异常



在我的代码中:

     andexpr : orexpr (AND orexpr)*;
 orexpr :  atomicExpression ( OR  atomicExpression)*;
 atomicExpression :
    attribute //THIS
  | equalsExpression
  | notEqualsExpression;
equalsExpression: attribute eq (value | arrayValue);
notEqualsExpression: attribute neq (value | arrayValue);

我想让THIS规则抛出异常并且是无效的情况。我希望它被包含为"有效",以便在解析树时生成额外的上下文。我只输入attribute。有可能吗?

使用您的代码:

 atomicExpression :
    attribute {if(true) {System.out.println("error");throw new RuntimeException();}}
  | equalsExpression
  | notEqualsExpression;

错误

调用org.antlr.v4.gui.TestRig.main(args)时出现问题

我做了一个快速测试,ANTLR v4.5.3的TestRig似乎捕捉到了RuntimeException本身。因此,它只是打印一条声明,说明在没有异常后通常遇到的堆栈跟踪的情况下调用TestRig.mans(args)时出现问题。因此,我建议您在抛出异常之前添加一些有意义的内容。

if(true)对于防止java编译器抱怨无法访问的语句是必要的,因为它足够聪明,知道RuntimeException()终止了程序,但在异常子句之后肯定会有一些代码由ANTLR生成。

请参阅我之前的问题:如何终止ANTLR4 中的Lexer

相关内容

  • 没有找到相关文章

最新更新