ANTLR4访问者子树检查

ANTLR4访问者子树检查,antlr,visitor,antlr4,Antlr,Visitor,Antlr4,我有一个问题。根据下面的语法摘录。测试访问者中是否存在可选的actualParameters子树的正确方法是什么 我尝试了procedureCallStatement上下文的getChildCount方法。我还测试了上下文中的null actualParameters参数 如果actualParameters子树不存在,我不想访问它。这样做会导致异常 谢谢大家! 开尔文·约翰逊 program : statement (';' statement)* ';'?; statement : CAL

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

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

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

谢谢大家!

开尔文·约翰逊

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

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

actualParameters : expressionStatement (';' expressionStatement)* ;

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

调用ctx.getActualParameters()或标记它

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

然后使用ctx.getArgs()

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

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

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

    ...
}

你好我一直在使用ctx.actualParameters。我注意到它没有用get前缀生成。谢谢280Z28:)这就是我想做的;针对null测试上下文,但此技术失败。原来我有个打字错误。我刚刚又试了一次,效果很好。电脑可能很烦人。他们只做你告诉他们的事!!