
第一章引论 1.1编译程序和解释程序 1.2编译过程和编译程序的结构(重点) 1.2.1编译过程概述 1.2.2编译程序结构 1.2.3编译阶段的组合 1.3编译程序在其他软件中的应用 1.4程序设计语言范型 1.5编译程序实现途径 本章练习 课程目录 悲 作业
1 第一章 引论 1.1 编译程序和解释程序 1.2 编译过程和编译程序的结构(重点) 1.2.1 编译过程概述 1.2.2 编译程序结构 1.2.3 编译阶段的组合 1.3 编译程序在其他软件中的应用 1.4 程序设计语言范型 1.5 编译程序实现途径 本章练习 作业 课程目录

1.1什么是编译程序D1 编译程序的必要性 计算机是当代科学发展的重要工具,已渗入到各 个行业乃至家庭生活中 要让计算机为人类工作服务,就必须建立人与计 算机之间的信息交流 但计算机只认识由“0”和“1”构成的机器语言,每 台机器都有自己独特的指令系统,即机器语言 最早的程序就是用8进制和16进制码的机器语言书 写的
2 1.1 什么是编译程序 p1 编译程序的必要性 计算机是当代科学发展的重要工具,已渗入到各 个行业乃至家庭生活中 要让计算机为人类工作服务,就必须建立人与计 算机之间的信息交流 但计算机只认识由“0”和“1”构成的机器语言,每 台机器都有自己独特的指令系统,即机器语言 最早的程序就是用8进制和16进制码的机器语言书 写的

编译程序的必要性(续) 用机器语言书写程序,不仅不易学,而且可调 试性、可读性、可维护性和结构性都很差,开 发时间也很长 因此,先后出现了用于源程序设计的语言: 基于助记符的汇编语言 接近人类自然语言的高级程序设计语言 编译程序最初的定义是把一种高级语言设计的 源程序(面向人的)翻译成另一种等价的低级程 序设计语言(面向硬件的)即机器语言或汇编语 言 悲 D
3 编译程序的必要性(续) 用机器语言书写程序,不仅不易学,而且可调 试性、可读性、可维护性和结构性都很差,开 发时间也很长 因此,先后出现了用于源程序设计的语言: 基于助记符的汇编语言 接近人类自然语言的高级程序设计语言 编译程序最初的定义是把一种高级语言设计的 源程序(面向人的)翻译成另一种等价的低级程 序设计语言(面向硬件的)即机器语言或汇编语 言

程序设计语言源程序的执行方式 程序设计语言源程序的执行基本有两种方式 翻译使用翻译程序,将源程序翻译成为低级语 言目标程序,然后执行目标程序 解释 使用解释程序,对源程序逐个语句边解释 边执行 可比喻为 译文一目标程序 翻译一笔译(产生译文,可进行优化,一次 翻译过后,多次使用) 解释一口译(不产生译文,交互方便,节省 空间,对重复部分要反复解释,效率低)
4 程序设计语言源程序的执行方式 程序设计语言源程序的执行基本有两种方式 翻译 使用翻译程序,将源程序翻译成为低级语 言目标程序,然后执行目标程序 解释 使用解释程序,对源程序逐个语句边解释 边执行 可比喻为 译文—目标程序 翻译—笔译 (产生译文,可进行优化,一次 翻译过后,多次使用) 解释—口译 (不产生译文,交互方便,节省 空间,对重复部分要反复解释,效率低)

翻译程序和解释程序图解 源程序 翻译程序 目标程序 (源语言) (目标语言) 源程序 解释程序 共同点:都需 (源语言) 进行词法、语 法和语义分析 输入 输出 悲
5 翻译程序和解释程序图解 源程序 (源语言) 翻译程序 目标程序 (目标语言) 源程序 (源语言) 解释程序 输入 输出 共同点:都需 进行词法、语 法和语义分析

程序设计语言源程序的执行方式 例假设有源程序:read();write("x=",x); read()方 翻译程序 目标程序 write("x=",x); 3 目标程序 X=3 read(x); 解释程序 > X=3 write("x=",x); 3
6 程序设计语言源程序的执行方式 例 假设有源程序:read(x); write("x=", x); read(x); write("x=", x); 目标程序 目标程序 3 X=3 read(x); write("x=", x); 翻译程序 解释程序 3 X=3

编译程序和解释程序p8 最主要区别 是否生成目标程序 解释系统 运行时的存储分配 源程序 源程序缓冲区 工作单元及名字表 目标代码区 名字表 标号表 目标代码缓冲区 缓冲区(输入输出) 编译程序用中间表 数据区 示及各种表格 栈区 编译程序编译时和运行时 解释程序 存储区内容 存储区内容
8 编译程序和解释程序 p8 最主要区别 是否生成目标程序 运行时的存储分配 源程序缓冲区 名字表 目标代码缓冲区 编译程序用中间表 示及各种表格 目标代码区 数据区 解释系统 源程序 工作单元及名字表 标号表 缓冲区(输入输出) 栈区 编译程序编译时和运行时 存储区内容 解释程序 存储区内容

编译程序和解释程序 Basic、Lisp、SQL解释程序、Unix命令语言 解释程序及很多脚本语言Javascript等都解 释执行的 C、C+等语言是编译执行的。 Java语言的处理环境既有编译程序,也有解 释程序,见图1.15(p9) JVM Java-→编译程序→Bytecode→解释程序 “一次编译,到处执行” 悲
9 编译程序和解释程序 Basic、Lisp、SQL解释程序、Unix命令语言 解释程序及很多脚本语言Javascript等都解 释执行的 C、C++等语言是编译执行的。 Java语言的处理环境既有编译程序,也有解 释程序,见图1.15(p9) Java → 编译程序 → Bytecode →解释程序 “一次编译,到处执行” JVM

需预处理的源程序 高级语言程序 预处理程序 的处理过程P1 源程序 ▣ 编译程序 ■ 目标汇编程序 汇编程序 可再装配的机器代码 地址均为相对地址,不 能直接执行 装配/连接-编译程序 可再装配目标文件 章节目录 绝对机器代码 10
10 高级语言程序 的处理过程 P1 需预处理的源程序 预处理程序 源程序 编译程序 目标汇编程序 汇编程序 可再装配的机器代码 装配/连接-编译程序 可再装配目标文件 绝对机器代码 章节目录 地址均为相对地址,不 能直接执行

1.2.1编译过程概述p2 编译过程可分为下面6个阶段(图1.10) 词法分析 语法分析 语义分析 中间代码生成 代码优化 目标代码生成 表格管理和出错处理
11 1.2.1编译过程概述 p2 编译过程可分为下面6个阶段(图1.10) 词法分析 语法分析 语义分析 中间代码生成 代码优化 目标代码生成 表格管理和出错处理