【发布时间】:2010-03-24 08:00:22
【问题描述】:
我正在用 Java 为面向 Windows 的 x86-32 (IA32) 处理器构建编译器/汇编器/链接器。
高级概念(我没有任何“源代码”:没有语法或词法翻译,所有语言都是常规的)被翻译成操作码,然后被包装并输出到文件中。翻译过程有几个阶段,一个是常规语言之间的翻译:最高层代码被翻译成中层代码,然后再被翻译成最低层代码(大概 超过 3 个级别)。
我的问题如下;如果我将高级代码(X 和 Y)翻译成低级代码(x、y、U 和 V),那么这种翻译的一个例子是伪代码:
x + U(f) // generated by X
+
V(f) + y // generated by Y
(一个简单的示例)其中V 与U 相反(与U 的堆栈推送和V 的弹出相比)。这需要“优化”为:
x + y
(基本上删除“无用”代码)
我的想法是使用正则表达式。对于上述情况,它将是一个如下所示的正则表达式:x:(U(x)+V(x)):null,表示所有x 查找U(x),后跟V(x),并替换为null。想象更复杂的正则表达式,用于更复杂的优化。这应该适用于所有级别。
你有什么建议?什么是优化和生成快速 x86 程序集的好方法?
【问题讨论】:
-
为了防止对我的问题的误解,我已经相应地更新了它。我不是在创建一个“源代码”编译器,而是创建一个“目标代码”编译器(在 Java 中)。对象是规则的(也是因为 Java 类型系统),用于所有级别的“语言”也是规则的。提供的示例只是这些对象的文本表示,以澄清我的问题。
标签: optimization assembly code-generation