任何人都知道从.c
源代码到最终可执行文件.exe
的完整操作链?
我已经下载了gcc的源代码,发现其c-parser.y
也是用c编写的:
extdef:
fndef
| datadef
| ASM_KEYWORD '(' expr ')' ';'
{ STRIP_NOPS ($3);
if ((TREE_CODE ($3) == ADDR_EXPR
&& TREE_CODE (TREE_OPERAND ($3, 0)) == STRING_CST)
|| TREE_CODE ($3) == STRING_CST)
assemble_asm ($3);
else
error ("argument of `asm' is not a constant string"); }
| extension extdef
{ pedantic = $<itype>1; }
;
所以谁知道c自我托管的完整故事?
更新
我知道如何编写一些脚本编译器,其中大多数都依赖于c编译器。
所以我现在问c编译器是如何工作的。
答案 0 :(得分:6)
GCC有一个多阶段的过程,但是从一个有效的C编译器开始(可能是也可能不是GCC的另一个版本)。
答案 1 :(得分:1)
你很惊讶C编译器是用C编写的吗? C专家在编写编译器时会使用哪种其他语言?
明显的鸡蛋问题只发生过一次,很久以前,根本没有没有编译器。然后有人必须在汇编中写一个(在别人用机器码编写第一个汇编程序之后: - )