【问题标题】:How to write visitor classes for collections?如何为集合编写访问者类?
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 谢谢。但现在我有一个不同的问题 - 代码在 eclipse 中工作,但不能在命令行中工作(既不是 windows,也不是 unix)。我为此发布了一个不同的问题,因为它看起来像是某种错误 - 20138858。
    猜你喜欢
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    相关资源
    最近更新 更多