antlr4如何使规则抛出异常

antlr4如何使规则抛出异常,antlr,antlr4,Antlr,Antlr4,在我的代码中: andexpr : orexpr (AND orexpr)*; orexpr : atomicExpression ( OR atomicExpression)*; atomicExpression : attribute //THIS | equalsExpression | notEqualsExpression; equalsExpression: attribute eq (value | arrayValue); notEquals

在我的代码中:

     andexpr : orexpr (AND orexpr)*;
 orexpr :  atomicExpression ( OR  atomicExpression)*;

 atomicExpression :
    attribute //THIS
  | equalsExpression
  | notEqualsExpression;

equalsExpression: attribute eq (value | arrayValue);
notEqualsExpression: attribute neq (value | arrayValue);
我想使
这个
规则抛出异常并成为无效案例。 我希望它包含为“有效”,以便在解析树时生成额外的上下文。我只输入
属性
。 有可能吗?

使用您的代码:

 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.mains(args)时出现问题,而没有异常后通常遇到的堆栈跟踪。因此,我建议您在抛出异常之前添加一些有意义的内容

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

见我的上一个问题: 使用您的代码:

 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.mains(args)时出现问题,而没有异常后通常遇到的堆栈跟踪。因此,我建议您在抛出异常之前添加一些有意义的内容

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

见我的上一个问题:

只需在“属性”中添加一个操作,并让它抛出一个未检查的异常。但请记住在throw语句之前加一个“if(true)”,以防止编译器抱怨无法访问的语句,因为ANTLR4将在您的操作之后生成某些内容。请提供示例,好吗?只需在“attribute”中添加一个操作,并让它抛出一个未经检查的异常。但请记住在抛出语句之前加上一个“if(true)”,以防止编译器抱怨无法到达的语句,因为ANTLR4将在您的操作后生成某些内容。请提供示例,好吗?谢谢您的解释。谢谢您的解释。