【问题标题】:Antlr Tree Grammar to Generate Pmachine code?Antlr 树语法生成 Pmachine 代码?
【发布时间】:2013-04-23 11:21:02
【问题描述】:

我目前正在做一个项目来构建一个小型 c 编译器以在 pmachine 上运行。目前,我开始使用完整 c 语法的精简版。目前解析看起来还不错,我使用重写规则来构建 AST 看起来还不错。目前,我正处于构建树语法以行走和生成 pmachinecode 的阶段。我的问题是,

树语法是否是遍历树并生成 p 代码的可行选择? (例如,我运行一个表达式并返回一串 pcode) 还是在没有 Antlr 的情况下手动构建 AST 的方法是实现这一目标的正确方法?

我只是想知道我是否真的在使用树语法。

您的建议将不胜感激。

最好的问候。

【问题讨论】:

    标签: parsing compiler-construction antlr antlr3 abstract-syntax-tree


    【解决方案1】:

    如果您的意图是生成堆栈机器 P 代码,那么遍历 AST 可能就可以了。不要期望生成的代码非常出色。

    您可以使用 AST walk 和许多窥视孔优化来生成更专注于(抽象或真实)寄存器的代码。 (基本上你会生成抽象代码,但会尽可能长时间地延迟发出它;窥视孔优化器会查看抽象代码序列并找到有用的优化并发出它们。

    示例:发出的抽象代码:

      PUSH X
      PUSH Y
      ADD
    

    窥视孔优化器识别这些并生成(附加 Pmachine 指令) 负载加速度,X 添加 ACC, Y 推加速

    这避免了 3 次内存读取和写入。如果你的 pmachine 有一个非常慢的解释器,你可能不在乎,但随着它变得更快,这种开销开始变得很大。

    您可以轻松发明许多有用的窥视孔优化方法。

    【讨论】:

    • 感谢您的回复。如果我完全理解您,您是否说使用 Antlr tree walker 是一种可行的方法?对于代码生成,我是按规则创建单独的类,还是只为每个树行者规则返回一个字符串 pcode?​​span>
    • 您可以在此处了解有关如何执行此操作的更多信息:stackoverflow.com/a/10544971/120163
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    相关资源
    最近更新 更多