代码之家  ›  专栏  ›  技术社区  ›  dreamlax

如何向gcc添加基于C的语言

  •  3
  • dreamlax  · 技术社区  · 15 年前

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

    我看了一下gcc的源代码,它看起来像是一个简单的解析器,它生成引用修改后的运行库的代码,然后对于所有基于C的代码,它使用常规的C编译器。我没有认真学习,所以我可能走错了方向。

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

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

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

    我看到的源代码一致地引用了“树”,并且有许多宏执行操作或从这些树中获取信息。

    周围有什么文件能深入解释这类事情吗?

    3 回复  |  直到 15 年前
        1
  •  2
  •   hlovdal    15 年前

    这些树最有可能 abstract syntax trees (AST) 任何一本编译书都会教你。 The dragon book 是非常经典的,在我上的课上我们用 The essence of compilers 作者:罗宾·亨特,ISBN 0-13-727835-7。你也应该能找到 来自不同高校的资料,有一些很好的检索词(编译器设计、ast、词汇分析、自上而下的分析、自下而上的分析、语义分析、ll、lr)。

        2
  •  2
  •   Laurynas Biveinis    15 年前

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

    1. The GCC Internals Manual
    2. 这个 GCC Wiki 特别是, Getting Started 页面包含许多信息,包括GCC树。
        3
  •  1
  •   Jonathan Leffler vy32    15 年前

    这取决于您是如何做的——但是您可能希望查找D编程语言的gcc实现。- GCD . 这是一项正在进行中的工作,但是它是在GCC框架中实现的一种完整的语言,没有(到目前为止)GCC团队内部的任何认可。GCD的经验可能是有益的。