Antlr树语法生成机器代码



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

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

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

请多多指教。

问好。

如果您的目的是生成堆栈机器p代码,遍历AST可能会很好。不要期望生成的代码是一流的。

您可以通过AST遍历生成更专注于(抽象或实际)寄存器的代码,以及大量的窥视孔优化。(基本上,你生成抽象代码,但尽可能延迟释放它;窥视孔优化器查看抽象代码序列,找到有用的优化并发出这些优化。

示例:发出的抽象代码:

  PUSH X
  PUSH Y
  ADD

窥视孔优化器识别这些并产生(额外的Pmachine指令)加载acc, x加上acc y推动ACC

这避免了3次内存读写。如果您的机器有一个非常慢的解释器,您可能不会在意,但是随着它变得越来越快,这个开销开始变得显著。

你可以很容易地发明几十个有用的窥视孔优化。

最新更新