ANTLR4访问者子树检查

3
我有一个Antlr4的问题。以下是语法摘录。如何正确地在访问者中测试可选的actualParameters子树的存在?我已经尝试使用procedureCallStatement上下文的getChildCount方法。我还在上下文中测试了实际参数参数是否为null。如果它不存在,我不想访问actualParameters子树。这样做会导致异常。谢谢!Kelvin Johnson
program : statement (';' statement)* ';'?;

statement : CALLPREFIX('(' actualParameters? ')')?  #procedureCallStatement;

actualParameters : expressionStatement (';' expressionStatement)* ;

expressionStatement : '(' expressionStatement ')'  #parensExpression
| IDENT'[' expressionStatement ']' #subscript
...
2个回答

4
自动生成的上下文方法ProcedureCallStatementContext.actualParameters()将返回已解析的ActualParametersContext,否则返回null。 您可以在访问器中这样使用它:
public T VisitProcedureCallStatement(ProcedureCallStatementContext ctx) {
    if (ctx.actualParameters() != null) {
        // do something here
    }

    ...
}

谢谢280Z28 :) 这就是我想做的事情;测试上下文是否为空,但这种技术失败了。结果发现我打错了一个字。我刚刚再试了一次,它正在工作。电脑可以如此令人恼火。他们只会按照你告诉他们的去做!! - Kelvin Johnson

1

可以调用ctx.getActualParameters()或者给它打上标签

statement : CALLPREFIX('(' args=actualParameters? ')')?  #procedureCallStatement;

然后使用ctx.getArgs()


你好。我一直在使用ctx.actualParameters。我注意到它没有使用get前缀生成。 - Kelvin Johnson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接