代码生成一般采用tree rewriting的方式,先将源代码转换成语法树的形式,通过模式匹配将子树替换成叶结点,同时生成代码指令,当树全部替换完后代码即生成了。采用这种方式主要关心匹配规则,甚至可以使用lex/yacc之类的工具生成code generator generator,也便于实现可移植的编译器。
dynamic programing
前面的算法如果只是从左往右依次匹配的话生成的代码质量不高,DP就是要考虑指令的代价,生成质量较优的代码。
自底向上为每个节点计算一系列值存入数组C[],其中index代表使用的register数目,存储的是相应的代价(要考虑可能增加的store/load指令代价),计算某个节点的C[]时,先找到可能的匹配模式,根据匹配模式选择可能的寄存器数目组合,计算代价后选择最小值。这样遍历整个树后可以得到最小代价生成方式。
posted on 2008-05-07 05:14
白色天堂 阅读(261)
评论(0) 编辑 收藏