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