我有一个Antlr4问题。鉴于下面的语法摘录。测试访问者中是否存在可选actualParameters
子树的正确方法是什么?
我尝试过procedureCallStatement上下文的getChildCount方法。我还测试了上下文中的null actualParameters参数。
如果不存在,我不想访问actualParameters子树。这样做会导致异常。
谢谢!
凯尔文约翰逊program : statement (';' statement)* ';'?;
statement : CALLPREFIX('(' actualParameters? ')')? #procedureCallStatement;
actualParameters : expressionStatement (';' expressionStatement)* ;
expressionStatement : '(' expressionStatement ')' #parensExpression
| IDENT'[' expressionStatement ']' #subscript
...
答案 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()