课程地址:https://www.icourse163.org/course/HIT-1002123007
什么是编译:
编译:将高级语言翻译成汇编语言或者机器语言的过程。
编译器的结构:
词法分析:
主要任务:从左向右逐行扫描源程序的字符,识别出各个单词,确定单词的类型。并将识别出的单词转换为统一的机内表示--词法单元(token)形式。
词法单元(token) :<种别码,属性值>
语法分析:
主要任务:语法分析器从词法分析器输出的token序列中识别出各类短语,并构造出语法分析树。语法分析树描述句子的语法结构。
语义分析:
主要任务:
一是收集标识符的属性信息。比如说种属(简单变量、复合变量、过程等)、类型(整型、字符型、指针型等)、存储位置和长度、值、作用域、参数和返回值信息等。
二是进行语义检查。例如变量和过程是否未经说明就使用、重复使用、类型不匹配等问题。
中间代码生成:
常见的中间表示形式:三地址码(由类似于汇编语言的指令序列生成,每个指令最多有三个操作数)、语法结构树/语法树等
三地址指令的表示:三元式、三元间接式、四元式(op,x,y,z);
以三地址指令的四元式为例:
x = y op z 可以表示为 (op,y,z,x)
x = y 可以表示为 (=,y,_,x)
目标代码生成:
主要任务:以源程序的中间表示形式作为输入,并把它映射到目标语言。一个重要任务是为程序中使用的变量合理分配寄存器。
代码优化:
为改进代码所进行的等价程序变换,使其运行的更快一些,占用空间更少一些。