我正在使用 Flex 和 Bison 编写一个迷你 Fortran 编译器。到目前为止我已经完成了词法和语法分析。我正在进行类型检查的语义分析,现在必须选择 IR。我的目标机器是MIPS。所以我想要基于 MIPS IAS 的最终代码生成。所以我认为好的 IR 是四倍。但我想介绍一些优化。因此,我构建了一个 DAG 结构(使用哈希表)。 IR 有 2 条路径:四元组或 DAG,然后是四元组。
如果我使用 DAG 作为我的 IR,我如何使用语句的 backpatching 方法?有了四联就很容易了。另一方面,DAG 更加抽象。我将被迫将其转换为四倍。我知道。我担心的是回溯。
最佳答案
我相信当您应该专注于高层设计时,您正在担心底层细节。此外,当前的编译器不使用四元组,而是使用SSA(静态单赋值)。对于最终的代码生成,也许可以看看 LCC 编译器,它们使用一种简单的方法通过树匹配来发出局部最优代码。
一种作弊方法是只生成一种高级语言(例如 C),并将繁重的工作留给其编译器(并且您可以免费获得可移植性;-)。
我不知道 Usenet 组 comp.compilers
是否以某种形式存在,但它是 FAQ将是我的第一站。不过,可能已经过时了。
关于c - 我的 Fortran 编译器的中间代码生成 : DAG or quadruples,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22392764/