编译器的普遍翻译步骤

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节总结&备忘

原文地址:https://www.cnblogs.com/kangyun/p/4329269.html