c - 我的 Fortran 编译器的中间代码生成 : DAG or quadruples

标签 c compiler-construction compiler-optimization intermediate-language intermediate-code

我正在使用 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/

相关文章:

可以从编译时未知的其他地方修改 const 变量吗

java - Eclipse 的 ecj 编译器可扩展吗?

c++ - 什么时候可以/将在 C++ 中内联一个函数?可以强制执行内联行为吗?

c++11 - 在代码中本地化 g++ 编译选项

rust - 调用函数时移动所有权是否会复制 `self` 结构?

c - 在 C 中将结构指针传递给 pthread_exit() 读取返回值时出错

c - 如何用c语言运行一个可执行文件?

c - 如何检查 libpcap 中的数据包可用性

c - 修改后的冒泡排序通过错误

windows - 为什么 "Executable files"依赖于操作系统?