【问题标题】:From Assembler to C-Compiler从汇编器到 C 编译器
【发布时间】:2014-03-07 09:51:11
【问题描述】:

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

谢谢

【问题讨论】:

  • GCC 端口和 binutils 端口并非易事。您的指令集是否类似于已受支持的现有处理器?
  • 成为会员一天,第一个问题请创建/修改 C 编译器。如果并回答这将是一个收费天的工作至少!
  • 我认为你最好尝试适应 LLVM / clang。无论您是否愿意,您都必须调查链接器脚本等。
  • @EdHeal,成为会员一天,并不一定意味着他开始编码一天。 ;)
  • @Devolus - 我不是那个意思。闯入一个新的团体时不要试水吗?

标签: c gcc compiler-construction verilog


【解决方案1】:

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

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

使用 Eli Bendersky 的 pycparser,您只需将 AST 转换为控制流图 (CFG) 并从那里生成代码。从支持 C 的子集开始比完整的 shebang 更容易。

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

我发现大多数开源编译器(似乎是 clang 除外)耦合太紧密,无法轻松修改后端。 Clang 尤其是 GCC 并不容易深入研究,没有比上述两个更容易的地方了。并且由于 Eli 的解析器执行完整的 C99(它解析我向它抛出的所有内容),它似乎是一个很好的前端,可用于进一步的开发。 The examples on the Github project 演示了该项目的大部分功能,并且很容易上手。将 C 解析为文字英语的示例值得一看,但可能需要一段时间才能完全理解。它基本上可以处理任何 C 表达式,因此对于如何处理 AST 的不同节点是一个很好的参考。

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

【讨论】:

    猜你喜欢
    • 2016-05-04
    • 2013-07-23
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    相关资源
    最近更新 更多