关于编译原理的一些哲学想法
自我学习编译原理遇到了一些挫折以来,阴霾一直都萦绕在我心头,终于我也想到了一些能够说服自己的东西,特此写一篇博客。
问题
一直以来,编译原理最让我感到困惑的并不是前端的那些个有限自动机,上下文无关文法的数学原理,也不是后端千变万化的算法,已然由历史固化下来的精髓,学习起来却也并不会具有很大的难度。但其中有一个环节,代码生成:将 IR 转换为目标机器的代码,这一个部分困扰我许久
在 Engineering a Compiler
这本书里,代码生成的一章节,只阐述了两个算法,分别是树匹配算法和窥孔优化,主要起作用的算法是树匹配算法,这个算法会预设一个子树(可能是一个节点)能被一组目标机器代码所替代,然后通过组合将一个 BasicBlock 转化为目标机器代码,这个算法本身没问题,问题在于,上面的这个预设是否成立?
解答
TODO