【问题标题】:How can I add a C-based language to GCC如何将基于 C 的语言添加到 GCC
【发布时间】:2009-05-01 11:18:35
【问题描述】:

如果我想修改或添加我自己的 C 扩展,并将它们添加到 GCC C 编译器,我需要做什么?我不想提议对语言进行更改,我想知道 C 编译器实际上是如何工作的。

我查看了 GCC 的源代码,它看起来好像 Objective-C 被实现为一个简单的解析器,它生成引用修改后的运行时库的代码,然后引用所有基于 C 的它使用常规的 C 编译器。我没有深入研究它,所以我可能没有走在正确的轨道上。

例如,我想在 Objective-C 中添加我自己的关键字,只是为了好玩。我想添加一些看起来很容易实现的东西,比如@assert。我只想让@assert 调用一个我将添加到Objective-C 运行时的函数:

objc_runtime_assert (__FILE__, __LINE__, expression, "string version of expression");

显然我可以将其实现为函数调用和宏,但我想了解 C 源代码的解析和编译阶段,也许我可以将自己的扩展添加到我自己使用的语言中.

我查看的源代码一直提到“树”,并且有很多很多宏可以执行操作或从这些树中获取信息。

是否有任何文档可以深入解释这类事情?

【问题讨论】:

  • 我帮不了你,只能看看en.wikipedia.org/wiki/Abstract_syntax_tree
  • 如果你想破解编译器,尤其是 Objective-C,你应该看看 LLVM。 Apple 转向 LLVM 的部分原因是它比 GCC 更容易修改和扩展,并且代码库更简洁。

标签: c objective-c gcc language-design objective-c-runtime


【解决方案1】:

这些树很可能是abstract syntax trees (AST),任何编译器书籍都会教授这一点。 The dragon book 是一个非常经典的,在我参加的课程中,我们使用了 Robin Hunter 的 The essence of compilers,ISBN 0-13-727835-7。您还应该能够通过一些好的搜索词(编译器设计、AST、词法分析、自顶向下解析、自底向上解析、语义分析、LL)找到来自不同学院和大学的大量材料。 , LR)。

【讨论】:

    【解决方案2】:

    这取决于您是否已经熟悉一般的编译器。如果没有,请从Dragon Book 开始。如果是,那么 GCC 已经为您准备了一些文档:

    1. The GCC Internals Manual
    2. GCC Wiki,尤其是Getting Started 页面包含许多信息,包括 GCC 树。

    【讨论】:

      【解决方案3】:

      这取决于你是怎么做的——但你可能想寻找 D 编程语言的 GCC 实现——GCD。这是一项正在进行中的工作,但它是在 GCC 框架中实现的完整语言,但(到目前为止)没有得到 GCC 团队的认可。 GCD 的经历可能是有益的。

      【讨论】:

      • 未来的更新 -- GCD 已合并到主线 GCC 中,该站点已经过时了。
      • @JL2210 — 十年来世界的变化很有趣!
      猜你喜欢
      • 2015-11-30
      • 2018-05-02
      • 2011-05-04
      • 2019-09-15
      • 1970-01-01
      • 1970-01-01
      • 2014-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多