编译原理 —— 编译程序相关概念

本文最后更新于:2020年1月27日 晚上

概览:编译阶段的前端与后端、编译程序包含的内容以及编译程序与解释程序的区别。

编译阶段划分为前端和后端

编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。

后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。

一个典型的编译程序

一个典型的编译程序通常包含 8 个组成部分,它们是词法分析程序语法分析程序语义分析程序中间代码生成程序中间代码优化程序目标代码生成程序表格管理程序错误处理程序

其各部分的主要功能简述如下。

词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。

语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息

语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。

中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。

中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。

目标代码生成程序:将优化后中间代码程序转换成目标代码程序。

表格管理程序:负责建立、填写和查找等一系列表格工作。

错误处理程序:处理和校正源程序中存在的词法、语法和语义错误。当编译程序发现源程序中的错误时,错误处理程序负责报告出错的位置和错误性质等信息,同时对发现的错误进行适当的校正(修复),目的是使编译程序能够继续向下进行分析和处理。

编译程序和解释程序的区别

翻译程序是指将用某种语言编写的程序转换成另一种语言形式的程序的程序,如编译程序和汇编程序等。

广义上讲,编译程序和解释程序都属于翻译程序,但它们的翻译方式不同

解释程序是边翻译(解释)边执行不产生目标代码,输出源程序的运行结果。

编译程序只负责把源程序翻译成目标程序,输出与源程序等价的目标程序,而目标程序的执行任务由操作系统来完成,即只翻译不执行