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测试上下文,但此技术失败。原来我有个打字错误。我刚刚又试了一次,效果很好。电脑可能很烦人。他们只做你告诉他们的事!!