编译器的普遍翻译步骤
1.扫描程序(scanner)
把源代码中的语句扫描进来,并分解成token。即词法分析。
2.语法分析程序(parser)
进行语法分析,并将分析结果用分析树(parse tree)或者语法树(syntax tree)表示出来。
3.语义分析程序(semantic analyzer)
在语法树下面添加语义分析
如a[index]=4+2;
将a识别成 array of integer ,index识别成integer,4、2识别成常量。
并补充在语法树下面。
4.源代码优化程序(source code optimizer)
改进源代码,生成中间代码。
例如a[index] = 4+2
t=4+2
a[index]=t;
则经过源代码优化后可形成a[index]= 6 这也被称为常量合并。
源代码优化程序在语法树的基础上进行,并将其转化为三元式或类似的线性结构进行输出而成为中间代码。
5.代码生成器(code generator)
生成目标代码
在本书中以汇编语言作为目标代码,上式a[index]=4+2;经过以上步骤后,代码生成器生成的目标代码为
mov r0,index
mul r0,2
mov r1,&a;
mov r1,r0;
mov *r1,6
注:以上取地址的方式参照C语言,故取a的地址用&a,取r1的地址用*r
6.目标代码优化程序(target code optimizer)
优化目标代码
在这个阶段中,编译器尝试着改进由代码生成器生成的目标代码。这种改进包括选择编址模式以提高性能、将速度慢的指令更换成速度快的,以及删除多余的操作。
如上述汇编代码可优化为:
mov r0,index
shl r0
mov &a[r0],6
PS:以上为阅读该书1.3节总结&备忘