第1章 概述
翻译程序
将一种语言程序(称为源程序)改造成另一种等价的语言程序(称为目标程序)的程序。
源语言:书写源程序的语言称为源语言。目标语言:书写目标程序的语言称为目标语言。
- 汇编程序:把汇编语言写的源程序翻译成机器语言的目标程序,这个翻译过程称为汇编。汇编程序一般对源程序进行两遍扫描来完成。
- 编译程序:将高级语言写的源程序翻译成目标语言(汇编语言、机器语言)的程序。这种翻译过程称为编译。
- 解释程序:将高级语言写的源程序作为输入数据,但并不产生目标程序,而是边解释边执行源程序本身的一种程序。
汇编程序最容易实现,其次是解释程序,编译程序最难。
编译过程
- 源程序输入
- 词法分析:识别单词,内部编码
- 语法分析:将词法分析的单词组成句子,分析是否符合语法规则
- 语义分析及中间代码生成:根据语义分析,将源程序表示成一种内部形式(中间语言)或直接生成目标程序。
- 修饰优化:使得生成的目标程序占有内存少,运行速度快。
- 目标代码生成:将中间语言代码转换成机器语言程序或汇编语言程序
- 信息表管理程序
- 错误检查和处理程序
注意:大多情况下,将语义分析包含在语法分析过程中,这样就将编译过程分成5个阶段。事实上,这并非固定不变的,有时中间代码、优化可以省掉,有时还要进行错误检查和处理以及各种信息表格的管理。
编译程序的分遍(趟程)
定义:从头到尾扫描一遍源程序或等价源程序,并做有关加工处理,称趟程。每经过一趟源程序都要进行等价变换并更接近目标程序。
适用情况:当源语言较繁,编译程序功能很强,目标程序优化程度较高且计算机存储容量较小时,采用多遍扫描方式。
- 如果通过对源程序一遍扫描直接生成目标代码程序,则说编译程序是单遍的。
- 把源程序分为几遍来编译,每遍只完成编译程序中的一部分或几个部分工作,称为多遍的
系统程序设计语言
- 能够编写编译程序或其他系统软件的高级语言。
编译程序开发技术
自编译
- 如果一种高级语言与之相应的编译程序也能直接用该语言本身写出来,具有这种性质语言称自编译语言,即自编译。能够编译自身的编译程序称自编译程序。
- 自编译语言除了书写自身编译程序外,一般还可以编写其它语言编译程序。
- 系统程序设计语言就是这样自编译语言,通常把能够编写编译程序或其它系统软件(如操作系统)的高级语言称系统设计语言,到目前为止,作为系统程序设计语言有PASCAL,MODULA,C,C++和ADA等。
自展技术
- 可以由一个功能较小的编译程序,一级一级扩充而变成一个功能较强的编译程序。
交叉编译
- 如果一个A机器上编译程序能产生B机器的目标代码,则称这种程序为交叉编译程序。
移植
- 移植是编译程序开发中一项十分重要技术,移植就是把一台计算机上的软件移植到另一台计算机上去。
越努力越幸运!