如何为集合编写访问者类?

时间:2013-11-21 12:52:59

标签: antlr4

本书中的示例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);}
      ;

1 个答案:

答案 0 :(得分:0)

生成的ProgContext.stat()方法返回完整集合。您可以在访问者的visitProg方法中访问它。