在 linux 中运行:gcc -S preProcessSource.c -o compilePreProcessSource.s。得到 compilePreProcessSource.s 文件。
参数 -S 将 preProcessSource.c 编译为汇编程序 compilePreProcessSource.s。
编译可以被通俗地理解为将一种格式的字符串转化为另一种格式的字符串。将这个概念带入 -S 指令,可以认为 source.c 源码中出现的 sum(3, 5) 被转化为汇编语言 call sum。
实际上C语言中函数的调用的确对应 X86汇编语言 的 call 指令。但是转化过程十分复杂。不同理论的语言有不同的编译原理,主要分为两各派系,一类是面向过程的编译,一类是面向对象的编译。
接下来我将站在逻辑层面(means I won’t code a real compiler, But I will guide you to understand the compilation process ),结合C语言编译器的实现过程描述C语言的实现过程。
词法分析:分解源程序,得到一个个符号。
将输入的源程序分解为一个个独立的词法符号,又记为token。
假设下例中 a 的类型为 float。