【发布时间】:2019-03-07 08:46:47
【问题描述】:
这个问题的背景:我试图了解编译器是如何工作的。我学到了很多新东西:扫描仪、解析器、AST、IR、优化、前端、后端、LL(1)、……我循序渐进,非常有趣。现在,我想做一些实际的工作。
从程序员的角度来看,我知道为什么typedef struct { int x; mytype* next; } mytype; 无法编译,并且我知道typedef struct mystruct { int x; struct mystruct* next; } mytype; 的正确语法,但我想知道问题在编译期间确切 发生在哪里。我正在使用 gcc,我想知道如何使用 gcc 开发人员选项 -fdump-... 来回答这个问题。
【问题讨论】:
-
where the problem happens EXACTLY during compilation是什么意思? C 语言标准要求一个错误,编译器实现它。您是否需要知道 gcc 中哪个文件的哪一行?或者你在问什么? -
绝对不在词法分析器、后端或许多优化器中的任何一个中。在前端的某个地方还很早。
-
@AlexeyFrunze。你在前端的某个地方写,这正是我想知道的(Rq .
typedef struct ...只是一个例子来说明我试图做什么,但我还有其他的)。我想知道如果您查看生成的文件(.tu、.original、.gimple、.omplower 等等......),是否有一些开发者选项(gcc.gnu.org/onlinedocs/gcc/…)的策略来了解它究竟发生在哪里。参考资料:我开始读龙书。 -
很明显,龙书不会告诉你任何关于 gcc 的具体内容。你可以做的是找到错误从哪里打印,然后从那里向后工作。
-
@Alexey。我同意龙书是一本普通的书。如果我想做我在问题中提出的问题,那就是做一些理论以外的事情。理论(如龙书中所解释的)非常有趣但很难理解。幸运的是,网上有很多文档可以帮助我。所以,我想使用 gcc 和 -fdump 选项来做一些实际的工作。我有两个目标:试着让我的头脑围绕一些观点,也让我放松:)。我知道你写了一个编译器:恭喜!也许您有一些建议可以帮助我理解编译过程。
标签: gcc compilation compiler-construction