
第一章引论 n1.1编译程序和解释程序(重点) n1.2编译过程和编译程序的结构(重点) u1.2.1编译过程概述 ù1.2.2编译程序结构 u1.2.3编译阶段的组合 n 编译程序在其他软件中的应用(自学略) n 程序设计语言范型(自学略) n 自增:编译程序实现途径(自学略) n 本童练习 作业 课程目录 ☒回
1 第一章 引论 n 1.1 编译程序和解释程序(重点) n 1.2 编译过程和编译程序的结构(重点) u 1.2.1 编译过程概述 u 1.2.2 编译程序结构 u 1.2.3 编译阶段的组合 n 编译程序在其他软件中的应用(自学略) n 程序设计语言范型(自学略) n 自增:编译程序实现途径(自学略) n 本章练习 n 作业 课程目录

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

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

程序执行方式:翻译程序和解释程序图解 源程序 翻译程序 且标程序 (源语言) (且标语言) 共同点:都需 源程序 解释程序 进行词法、语 (源语言) 法和语义分析 区别:是否生 输入 输出 成目标程序 n Basic、Lisp、Sql、Javascript解释 nC、C++、Pascal翻译-编译 悲Java→ 编译程序→Bytecode→解释程序
4 程序执行方式:翻译程序和解释程序图解 源程序 (源语言) 翻译程序 目标程序 (目标语言) 源程序 (源语言) 解释程序 输入 输出 共同点:都需 进行词法、语 法和语义分析 区别:是否生 成目标程序 n Basic、Lisp、Sql、Javascript 解释 n C、C++、Pascal 翻译-编译 n Java → 编译程序 → Bytecode →解释程序

翻译程序的分类 翻译程序按所处理源语言不同分为两种 编译程序 汇编程序 高级语言 汇编或机器语宣 源程序 编译程序 且标程序 (米.C/*.PAS) (*OBT /*EXE) 汇编语宣 机器语言 源程序 汇编程序 且标程序 (*ASM) (*EXE) 章节目录 ☒
5 翻译程序的分类 n 翻译程序按所处理源语言不同分为两种 编译程序 汇编程序 高级语言 源程序 (*.C / *.PAS) 编译程序 汇编或机器语言 目标程序 (*.OBJ / *.EXE) 汇编语言 源程序 (*.ASM) 汇编程序 机器语言 目标程序 ( *.EXE) 章节目录

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

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

第二阶段语法分析p3 n任务 u输入单词符号串 u根据语言的语法规则对单词符号串进行扫描和分解 识别出各类语法单位 n程序语言的语法单位 u表达式、语句和程序等 u例X1=Y+10*Z 语法单位:表达式Y,10,Z,10*Z 赋值语句X1=Y+10*Z; n语法单位内部表示 u语法树
8 第二阶段 语法分析 p3 n 任务 u 输入单词符号串 u 根据语言的语法规则对单词符号串进行扫描和分解 u 识别出各类语法单位 n 程序语言的语法单位 u 表达式、语句和程序等 u 例 X1= Y + 10*Z; 语法单位:表达式 Y,10,Z,10*Z 赋值语句 X1=Y+10*Z; n 语法单位内部表示 u 语法树

语法单位的内部表示:语语法树 例某C语言源程序 赋值语句的语法树 main() 表达式〉》 sum →〈标识符>=; →〈表达式>+表达式》 →*→〈标识符〉》 〈表达式〉*→ first count 10
9 语法单位的内部表示:语法树 例某C语言源程序 main( ) {float sum,first,count; .sum=first+count*10;. } →=; →+ →* → → 赋值语句的语法树 = ; sum + first * count 10

第三阶段语义分析与中间代码产生p4 n任务 u输入各类语法范畴 根据语言的语义规则,分析其含义,并进行 初步翻译 u产生中间代码 F便于优化、移植,容易生成目标代码 形式有:三元式、四元式、树结构等。 10
10 第三阶段 语义分析与中间代码产生 p4 n 任务 u 输入各类语法范畴 u 根据语言的语义规则,分析其含义,并进行 初步翻译 u 产生中间代码 F 便于优化、移植,容易生成目标代码 F 形式有:三元式、四元式、树结构等