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

1.1什么是编译程序p1 编译程序的必要性 机器语言:计算机只认识由0和1构成的机器语言, 每台机器自己独特的指令系统即机器语言。 汇编语言 高级语言 ???? 编译程序概念 编译程序最初的定义是把一种高级语言设计的源 程序(面向人的)翻译成另一种等价的低级程序设 计语言(面向硬件的)即机器语言或汇编语言
2 1.1 什么是编译程序 p1 编译程序的必要性 机器语言:计算机只认识由0和1构成的机器语言, 每台机器自己独特的指令系统即机器语言。 汇编语言 高级语言 ???? 编译程序概念 编译程序最初的定义是把一种高级语言设计的源 程序(面向人的)翻译成另一种等价的低级程序设 计语言(面向硬件的)即机器语言或汇编语言

程序执行方式:翻译程序和解释程序图解 源程序 翻译程序 目标程序 (源语言) (目标语言) 共同点:都需 源程序 解释程序 进行词法、语 (源语言) 法和语义分析 区别:是否生 输入 输出 成目标程序
3 程序执行方式:翻译程序和解释程序图解 源程序 (源语言) 翻译程序 目标程序 (目标语言) 源程序 (源语言) 解释程序 输入 输出 共同点:都需 进行词法、语 法和语义分析 区别:是否生 成目标程序

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

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

翻译程序的分类 翻译程序按所处理源语言不同分为两种 编译程序 汇编程序 高级语言 编或机器语言 源程序 编译程序 目标程序 (*.C/*.PAS) (*OBJ *EXE) 汇编语言 机器语言 源程序 汇编程序 目标程序 (*ASM) (*EXE) 悲
6 翻译程序的分类 翻译程序按所处理源语言不同分为两种 编译程序 汇编程序 高级语言 源程序 (*.C / *.PAS) 编译程序 汇编或机器语言 目标程序 (*.OBJ / *.EXE) 汇编语言 源程序 (*.ASM) 汇编程序 机器语言 目标程序 ( *.EXE)

编译程序和解释程序 Basic、Lisp、Sql解释程序、Unix命令语言 解释程序及很多脚本语言Javascript等都解 释执行的。 0 C、C+、Pascal等语言是编译执行的。 Java语言的处理环境既有编译程序,也有解 释程序,见图1.5(p9) Java→编译程序→Bytecode→解释程序 悲
7 编译程序和解释程序 Basic、Lisp、Sql解释程序、Unix命令语言 解释程序及很多脚本语言Javascript等都解 释执行的。 C、C++、Pascal等语言是编译执行的。 Java语言的处理环境既有编译程序,也有解 释程序,见图1.5(p9) Java → 编译程序 → Bytecode →解释程序

需预处理的源程序 高级语言程序 预处理程序 的处理过程P1 源程序 编译程序 ■ 目标汇编程序 汇编程序 可再装配的机器代码 装配/连接-编译程序 可再装配目标文件 章节目录 绝对机器代码 d
8 高级语言程序 的处理过程 P1 需预处理的源程序 预处理程序 源程序 编译程序 目标汇编程序 汇编程序 可再装配的机器代码 装配/连接-编译程序 可再装配目标文件 绝对机器代码 章节目录

1.2.1编译过程概述D2 编译过程可分为下面5个阶段 词法分析 语法分析 语义分析和中间代码生成 优化 目标代码生成 表格管理和错误处理
9 1.2.1编译过程概述 p2 编译过程可分为下面5个阶段 词法分析 语法分析 语义分析和中间代码生成 优化 目标代码生成 表格管理和错误处理

第一阶段词法分析p2 例某C语言源程序 任务 main {float sum,first,count; 输入源程序(字符串) .sum=first+count*10;. 根据语言的词法规则 输出结果 对构成源程序的字符 class value 串进行扫描和分解 保留字 main 识别出一个个的单词 界符一左括号 单词内部表示形式 界符-右括号 二元式 界符一左花括号 (class,value) 保留字 float 标识符1-id1 sum 单词 单词值 算符-乘号 米 米型 整数 10 。 逃 10
10 第一阶段 词法分析p2 任务 输入源程序(字符串) 根据语言的词法规则 对构成源程序的字符 串进行扫描和分解 识别出一个个的单词 单词内部表示形式 二元式 (class,value) 单词 类型 单词值 例某C语言源程序 main( ) {float sum,first,count; .sum=first+count*10;. } 输出结果 class value 保留字 main 界符-左括号 ( 界符-右括号 ) 界符-左花括号 { 保留字 float 标识符1-id1 sum . 算符-乘号 * 整数 10