作者:艳红双唇l丶乱了他神 | 来源:互联网 | 2023-05-27 12:11
编译器完成高级语言到汇编程序的解析,它的工作过程划分为前端和后端,前端对源程序进行分析,把源程序切分成一些基本块并生成中间语言表示,后端在分析正确无误之后,把中间语言表示转化为目标机器支持的汇编语言。编译器完整的工作过程由以下阶段:
中间语言有很多种表示方式,包括语法树,后缀表示法和三地址码等,它们需要具备的共同特点是易于生成和易于译成目标代码。
代码优化阶段主要是为了提高中间代码的质量,以便提高目标程序的运行速度。代码优化既可以在语义分析之后完成,也可以在中间代码生成之后完成。
目标代码生成是把优化好的中间代码转化为目标机器的指令代码(汇编代码)。这个过程仍然需要做很多分析、优化、变形。代码生成器要对源程序中使用的变量分配寄存器,然后为每条中间语言选择合适的机器指令,包括机器指令的操作码和编址模式。
编译器的前端依赖于被编译的语言,前端还包括与这几个部分相关的符号表操作,错误处理以及与目标机器无关的代码优化过程。
编译过程中和目标机器相关的部分属于编译程序的后端,后端与源语言无关,只和中间代码有关。后端包括代码优化中涉及目标机器的部分,目标代码生成以及相关的符号操作及错误处理。
编译器的一个极为重要的功能是对程序中错误的反应,几乎在编译的每个阶段都可以诊查出错误。在词法分析阶段会发现字符的拼写错误,在语法分析阶段会检查单词串是否违反语言的结构规则,语义分析中,编译器进一步检查语法上正确但无意义的操作成分。