如何深入了解gcc编译器?

时间:2019-03-07 08:46:47

标签: gcc compilation compiler-construction

此问题的背景:我正在尝试了解编译器如何工作。我学到了许多新东西:扫描仪,解析器,AST,IR,优化,前端,后端,LL(1),……我逐渐取得了进步,这非常有趣。现在,我想做一些实际的工作。
从程序员的角度来看,我知道为什么typedef struct { int x; mytype* next; } mytype;无法编译,并且知道正确的语法typedef struct mystruct { int x; struct mystruct* next; } mytype;,但是我想知道在编译过程中完全发生问题的地方。我正在使用gcc,我想知道使用gcc开发人员选项 -fdump -... 来回答这个问题的可能性。

1 个答案:

答案 0 :(得分:1)

GCC编译器工作的第一步是解析器

c-parser.c 

它将您的c或c ++或其他代码解析为gimple表示形式:

Parse -> Gimplify -> Tree -> SSA -> Optimize -> Generate -> RTL -> Optimize RTL Generate -> ASM

例如,可以在终端中或在IDE中的错误输出中找到错误,如下所示:

gcc yourcode.c
yourcode.c:2:25: error: unknown type name 'mytype'
 typedef struct { int x; mytype* next; } mytype;
                         ^~~~~~

您还可以通过 link

对不起,我的英语。