编译器的结构:
词法分析器:
从左到右逐行扫描源程序的字符,识别出各个单词,确定单词的类型。
将识别出来的单词转换成统一的机内表示——词法单元形式。
(一词一码,多词一码)
token:<种别码,属性值>
语法分析器:
从词法分析器输出的token序列中识别出各类短语,并构造语法分析树。
D:声明语句
T:类型
IDS:标志序列
语义分析器:
收集标识符的属性信息,存放在符号表中:
种属:
简单变量、复合变量(数组、记录)、过程;
类型:
整型、实型、字符型、布尔型、指针型;
注意: 符号表一般带有一个字符串表(不必划分特定长度的空间用于存储字符串,
节省存储空间便于管理,字符串表是使用起始地址+偏移地址这样来计算的,
这样的话,增删改查操作都会简化)。
语义检查:
中间代码生成器:
数字代表指令编号,“j”是jump的缩写,指的是跳转指令。
机器无关代码优化器:
代码优化:为改进代码所进行的等价程序变换,使其运行更快、占用空间更小。