ANTLR4访客子树检查

时间:2012-12-12 23:11:08

标签: antlr visitor antlr4

我有一个Antlr4问题。鉴于下面的语法摘录。测试访问者中是否存在可选actualParameters子树的正确方法是什么?

我尝试过procedureCallStatement上下文的getChildCount方法。我还测试了上下文中的null actualParameters参数。

如果不存在,我不想访问actualParameters子树。这样做会导致异常。

谢谢!

凯尔文约翰逊

program : statement (';' statement)* ';'?;

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

actualParameters : expressionStatement (';' expressionStatement)* ;

expressionStatement : '(' expressionStatement ')'  #parensExpression
| IDENT'[' expressionStatement ']' #subscript
...

2 个答案:

答案 0 :(得分:4)

自动生成的上下文方法ProcedureCallStatementContext.actualParameters()将返回ActualParametersContext(如果已解析),否则将返回null

你可以在这样的访问者中使用它:

public T VisitProcedureCallStatement(ProcedureCallStatementContext ctx) {
    if (ctx.actualParameters() != null) {
        // do something here
    }

    ...
}

答案 1 :(得分:1)

调用ctx.getActualParameters()或将其标记为

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

然后使用ctx.getArgs()