如何为集合编写访问者类



书中的示例LabeledExpr.g4描述了如何将访问者类用于singleton。但是,如果我想参观一个收藏的班级,我该怎么办?例如语法:

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);}
      ;

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

相关内容

  • 没有找到相关文章

最新更新