1

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

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

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

您的建议将不胜感激。

此致。

4

1 回答 1

0

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

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

示例:发出的抽象代码:

  PUSH X
  PUSH Y
  ADD

Peephole 优化器识别这些并产生(附加 Pmachine 指令)LOAD ACC、X ADD ACC、Y PUSH ACC

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

您可以轻松发明数十种有用的窥视孔优化。

于 2013-04-29T20:38:03.627 回答