【发布时间】:2013-11-21 12:52:59
【问题描述】:
书中的示例 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类如何在visitor函数中访问?
stat [Expr e]
: expr NEWLINE # printExpr
{$e = new Expr($expr);}
;
【问题讨论】:
标签: antlr4