我目前正在开发一个项目,用于构建一个在pmachine上运行的小型c编译器。目前,我开始使用完整c语法的剥离版本。解析看起来还不错,我使用重写规则来构建AST 哪个看起来还不错。目前,我正处于构建树语法以走路并生成pmachinecode的阶段。我的问题是,
树语法是否是走树和生成p代码的可行选择? (例如我运行一个表达式并返回一个pcode字符串) 或者是手动构建AST的方法,而没有Antlr正确的方法来实现这个目标吗?
我只是想知道我是否真正使用树语法。
非常感谢您的建议。
最好的问候。
答案 0 :(得分:0)
如果您的目的是生成堆栈机器P代码,那么走AST可能会很好。不要指望生成的代码是恒星。
您可以使用AST walk生成更专注于(抽象或实际)寄存器的代码,以及许多窥孔优化。 (基本上你会生成抽象代码,但是会尽可能地延迟发出代码;窥视孔优化器会查看抽象代码序列并找到有用的优化并发出相应的代码。
示例:发出的抽象代码:
PUSH X
PUSH Y
ADD
窥孔优化器识别这些并产生(额外的Pmachine指令) 加载ACC,X 添加ACC,Y PUSH ACC
这可以避免3次内存读写。如果你的pmachine有一个非常慢的解释器,你可能不在乎,但随着它变得越来越快,这个开销开始变得很大。
您可以轻松发明许多有用的窥视孔优化。