一 什么是编译程序
从功能上看,编译程序就是一个语言翻译程序。语言翻译程序把一种语言书**(称作源语言)写的程序翻译成另一种语言(称作目标语言)**的等价程序。
一个程序设计语言的典型处理过程:
编译程序的结构
编译过程
编译过程可以划分为: 词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成 6个阶段。
词法分析
从左到右一个字符一个字符的读入源程序,对构成要换程序的字符流进行扫描和分解,从而识别出一个个单词。
语法分析
在词法分析的基础上将单词序列分解成各类语法短语。语法短语也成为语法单位,可以表示成语法树。
以 id1 := id2 + id3 * 10 为例,语法树如下:
语义分析
语义分析是审查源程序有无语义错误,为代码生成阶段收集类型信息。
中间代码生成
在完成语法分析和语义分析之后,将源程序编程中间代码,所谓中间代码就是一种结构简单、含义明确的记号系统,这种记号系统可以设计成多种多样的形式。遵循原则:容易生成,容易翻译成目标程序。
代码优化
对中间代码进行变换和搞糟,使生成的目标代码更为高效。 就是化简
目标代码生成
把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。