从汇编程序到C编译器

时间:2014-03-07 09:51:12

标签: c gcc compiler-construction verilog

我在verilog中设计了一个小型RISC。我必须采取哪些步骤来创建使用汇编语言的c编译器?或者是否可以修改像gcc这样的传统编译器,因为我不想做像链接器这样的事情......

由于

1 个答案:

答案 0 :(得分:0)

您需要使用未修改的C lexer +解析器(通常称为前端)和修改后的代码生成组件(后端)来执行此操作。

Eli Bendersky's pycparser可用作前端,Atul的mini C编译器可用作生成后端代码的灵感:http://people.cs.uchicago.edu/~varmaa/mini_c/

使用Eli Bendersky的pycparser,您需要做的就是将AST转换为控制流图(CFG)并从那里生成代码。支持C的一个子集比完全的shebang更容易。

这两个工具是用Python编写的,但是你没有提到任何实现语言偏好:)

我发现大多数开源编译器(除了铿锵似乎)太紧密耦合,很容易修改后端。 Clang尤其是海湾合作委员会并不容易深入探讨,其中就像上面两个一样容易。而且由于Eli的解析器完整的C99(它解析了我所抛出的所有内容),它似乎是一个很好的前端,用于进一步开发。 The examples on the Github project演示了项目的大部分功能,并且很容易上手。将C解析为文字英语的示例值得一看,但可能需要一段时间才能完全理解。它基本上处理任何C表达式,因此它是如何处理AST的不同节点的一个很好的参考。

在我对这个问题的回答中,我也推荐了上述工具:Build AST from C code