编译过程分为6步骤:扫描,语法分析,语义分析,源代码优化,代码生成和目标代码优化 source code ->scanner-> tokens ->parser-> syntax tree ->semantic analyzer-> commented syntax tree ->source code optimizer-> intermediate representation ->code generator-> target code ->code optimizer-> final target code 首先源代码被输入到扫描器,进行简单词法分析,使用有限状态机算法将源代码的字符序列分割成一系列记号. lex程序可以实现词法扫描 语法分析器将对记号进行语法分析,产生语法树,整个过程采用上下文无关语法的分析手段. 语法分析器可以使用yacc。 语义分析分为静态语义,在编译期间可以确定的,动态语义只有在运行期才确定的 静态语义包含声明和类型的匹配,类型的转换。 源码级优化器在不同编译器中可能后又不同的定义,源码优化器将整个语法树转换成中间代码,他是语法树的顺序表示。三地址码,P-代码 目标代码生成器和目标代码优化器