3

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

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

如果实际参数子树不存在,我不想访问它。这样做会导致异常。

谢谢!

开尔文·约翰逊

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

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

actualParameters : expressionStatement (';' expressionStatement)* ;

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

2 回答 2

4

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

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

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

    ...
}
于 2012-12-13T03:59:14.560 回答
1

调用 ctx.getActualParameters() 或标记它

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

然后使用 ctx.getArgs()

于 2012-12-13T01:36:49.377 回答