编译原理-编译概述

1.翻译与解释

编译程序是现代计算机系统中重要的系统软件之一,是高级程序设计语言的支撑软件。

把源程序转换成与之等价的目标程序的过程就是编译

本章主要内容:编译程序的组成及编译程序的工作环境,编译程序相关的基本概念

1.1 程序设计语言

1)在计算机发展初期,程序员直接用机器语言编写程序。

     机器语言程序的特点:不直观,难写、难读、难修改,并且对机器硬件的依赖性很强、移植性差。程序设计人员必须受过一定的训练并且熟悉计算机硬件,这在很大程度上限制了计算机的推广应用。

2)之后,出现了符号语言,即用比较直观的符号来代替纯粹数字表示的机器指令代码。

      符号语言的特点:便于记忆、检查和阅读。

3)在符号语言的基础上又进一步发展为汇编语言。在汇编语言中,除了用直观的助记符代替操作指令以对应一条条的机器指令外,还增加了若干宏指令,每条宏指令对应一组机器指令、完成特定的功能。这些宏指令构成指令码的扩展。汇编语言仍然是依赖于机器的,使用起来还是很不方便,并且程序开发效率也很低。

4)相对于低级语言,高级语言具有以下优点:

        1' 更接近于自然语言、独立于机器。

        2' 运行环境透明性。

        3' 具有丰富的数据结构和控制结构,编程效率高。

用高级语言编写的程序要想在计算机上执行,必须经过加工处理,将其转换为等价的机器语言程序,这个转换过程就是“编译”。某种高级语言的编译程序加上一些相应的支持用户程序运行的子程序就构成了该语言的编译系统,编译系统是计算机系统的重要组成部分。

1.2 翻译程序

每种计算机都有自己独特的机器语言(即指令系统)。因此,为 了让一种语言投入使用,需要一个语言翻译器把用该语言书写的源程序翻译成目标计算机能够执行的表示形式或将源程序直接翻译成结果(即直接执行源程序)。

通常将程序翻译成另外一种表示形式的翻译器称为编译器(即编译程序),而直接执行源程序给出.运行结果的翻译器称为解释器(即解释程序)。编译程序扫描所输入的源程序,并将其转换为目标程序。

如果源语言是汇编语言,目标语言是机器语言,则该编译程序称为“汇编程序”;如果源语言为高级语言,目标语言是某种机器的机器语言或汇编语言,则该编译程序称为“编译程序”。图1-2说明了高级语言程序的编译和执行阶段。

编译原理-编译概述_第1张图片

解释程序可以看作是一种模拟器,这种模拟器的“机器语言”就是要被翻译的语言。解释程序对源程序进行解释执行,即边解释边执行,不生成目标程序,如图1-3所示。

编译原理-编译概述_第2张图片

2.编译的阶段和任务

按照编译程序的执行过程和所完成的任务,可以把它分成前后两个阶段,即分析阶段综合阶段

1)在分析阶段,编译程序根据源语言的定义检查源程序的结构是否符合语言规定。确定源程序所表示的对象和规定的操作,并将源程序以某种中间形式表示出来。

2)在综合阶段,编译程序根据分析阶段的分析结果构造出与源程序等价的目标程序。

编译程序的典型结构如下图所示

编译原理-编译概述_第3张图片

3.和编译相关的概念

1)编译的前端和后端

      通常可以将编译程序划分通常可以将编译程序划分为前端(frontend)后端(backend)两部分。

      1' 前端主要由与源语言有关而与目标机器无关的部分组成,通常包括词法分析、语法分析、语义分析和中间代码生成符号表的建立、中间代码的优化,以及相应的错误处理工作和符号表操作。

      2' 后端由编译程序中与目标机器有关的部分组成,这些部分与源语言无关而仅仅依赖于中间语言。后端包括目标代码的生成、目标代码的优化,以及相应的错误处理和符号表操作。

把编译程序划分成前端和后端的优点是便于编译程序的移植和构造

2)“遍”的概念

 在设计编译程序时,还需要考虑编译分“遍”(pass)的问题。

“遍”指的是对源程序或中间表示形式从头到尾扫描一次,并在扫描过程中完成相应的加工处理,生成新的中间表示形式或目标程序。采用不同的扫描遍数和不同的分遍方式,都会造成编译程序在具体结构上的差别。

    一遍扫描+多遍扫描程序

4.编译程序的伙伴工具

一个语言处理系统如下图所示:

编译原理-编译概述_第4张图片

1)预处理器

通常,用户所写源程序都是框架源程序,需要预处理器对它进行相应的处理,以产生编译程序的输人。预处理器主要完成宏处理、文件包含、语言扩充等功能。

2)汇编程序

此处略。

5.编译原理的应用

结构化编译器、程序格式化工具、程序测试工具、程序理解工具、高级语言翻译工具等。

你可能感兴趣的:(编译原理)