编译原理(1)

来源:互联网 发布:java zxing 二维码 编辑:程序博客网 时间:2024/05/16 13:50

引论


程序设计语言及编译

程序设计语言

  • 机器语言
  • 汇编语言
  • 高级语言

编译程序

编译程序是现代计算机系统的基本组成部分.

从功能上看,一个编译程序就是一个语言翻译程序,它把一种语言(称作源语言)书写的程序翻译成另一种语言(称作目标语言)的等价的程序.

编译程序:A语言—–>B语言的程序(两者逻辑上等价)

编译程序:高级语言 ——->低级语言

解释程序:边解释边执行

源程序执行途径

这里写图片描述

解释程序(Interpreter)

  • 不产生目标程序文件
  • 不区别翻译阶段和执行阶段
  • 翻译源程序的每条语句后直接执行
  • 程序执行期间一直有解释程序守候
  • 常用于实现虚拟机

编译过程概述

  • 词法分析
  • 语法分析
  • 语义分析
  • 中间代码生成
  • 代码优化
  • 目标代码生成

编译过程与语言翻译的对比

这里写图片描述

词法分析:扫描源程序—–>区分单词—–>换为属性字

这里写图片描述

语法分析:单词序列—–>语法短语(程序、表达式、条件语句……)检查语法错误,若无错误,给出正确的语法结构。 这种语法短语也称语法单位,可表示成语法树。

这里写图片描述

这里写图片描述

这里写图片描述

语义分析与中间代码生成:根据语法结构,分析含义,产生中间代码。

中间代码多采用三地址指令或四元式形式。

| 算符 | 左操作数| 右操作数 |结果 |
| ————- |:————-:| —–:|—–:|
这里写图片描述

代码优化:时间和空间

目标代码生成:中间代码—–>低级语言代码

编译程序结构

编译程序总框

  • 表格管理
  • 出错处理

源程序错误:

  • 语法错误:不符合语法(或语义)规则的错误,可在词法分析或语法分析时检测。
  • 语义错误:不符合语义规则的错误,在语义分析(或运行时)可检测。
    这里写图片描述

遍(趟)pass

  • 编译的若干阶段通常以一遍来实现,每遍读一次输入文件、产生一个输出文件。
  • 多个编译阶段可以组合为编译的一遍,并且每一遍中的各编译阶段的工作可以相互交错。

编译程序的生成

  • 移植
  • 自编译

T型图
这里写图片描述

  • S:编译程序所实现的源语言
  • T:目标语言
  • I:编译程序的实现语言

编译程序与T型图

(M机器上运行的)本地编译器
这里写图片描述
(M机器上运行的)交叉编译器
这里写图片描述
用已有语言L1实现新语言L2
这里写图片描述

方法:

  1. 用L1语言编写A机器的L2语言编译程序
  2. 将该L2语言的编译程序用L1语言的编译程序进行编译

移植:
这里写图片描述

用A机器上已有的语言L编写一个在B机器上运行的语言L的编译程序。方法:

  1. 用L编写在A机器上运行的产生B机器代码的L编译程序源程序X
  2. 用L编译程序对X进行编译后,得到一个能在A机器上运行的产生B机器代码的编译程序Y(交叉编译程序)
  3. 再用Y对X进行编译,得到能在B机器上运行的L语言的编译程序
1 0
原创粉丝点击