本书中的示例LabeledExpr.g4描述了如何将访客类用于单身人士。但是,如果我想访问一个集合类,我该怎么做?例如语法:
prog: stat+ ;
stat: expr NEWLINE # printExpr
;
打印的访客功能显示为:
public Integer visitPrintExpr(LabeledExprParser.PrintExprContext ctx) {
Integer value = visit(ctx.expr()); // evaluate the expr child
System.out.println(value); // print the result
return 0; // return dummy value
}
“stat +”的相应访问者功能是什么,以便我可以遍历“stat”列表?
我正在寻找这个的原因是,我可能想先将整个对象模型解析并存储在内存中,然后对其进行多次访问和分析(而不是实时评估/打印为书的例子显示了。)
一个相关的问题是,如果我在语法文件中创建一些数据结构(如本书中的ActionExpr.g4所示),如何在访问者函数中访问这些数据结构?例如如何在访问者函数中访问下面创建的Expr类?
stat [Expr e]
: expr NEWLINE # printExpr
{$e = new Expr($expr);}
;
答案 0 :(得分:0)
生成的ProgContext.stat()
方法返回完整集合。您可以在访问者的visitProg
方法中访问它。