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