第二章计算机语言的实现PPT教学课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

main
printf hello
5
2. 语法分析
分析单词序列; 识别语法结构;
标识符
查语法错误; 构造分析树;
2020/12/11
语句
表达式

函数调用
( 表达式 )
常数
字符串
6
3. 语义分析
确认标识符的属性
类型、作用域等
语义检查
运算的合法性、取值范围等
子程序的静态绑定
代码存储的相对地址
变量的静态绑定
汇编指令代码 机器指令代码
2020/12/11
9
编译程序的结构
表格管理
词语语 法法义 分分分 析析析


间代标
代码代
码优码
生化生


错误处理
2020/12/11
10
其他模块
表格管理
辅助语法检查、语义检查 完成静态绑定、管理编译过程
错误处理
词法:拼写...
语法:语句结构、表达式结构...
语义:类型不匹配...
数据存储的相对地址
2020/12/11
7
4. 生成中间代码
中间语言
简单规范 机器无关 易于优化与转换
按照语法分析树生 成中间语言代码
运算指令 控制指令
2020/12/11
例: printf(“hello”)的翻 译(三地址代码)
x := s (赋值) param x (参数) call f (函数调用)
2020/12/11
22
3) 利用编译程序自动生成器
词法分析器的自动生成程序
词法规则说明 LEX
输入: 词法(正规表达式) 识别动作(C程序段)
输出: yylex( ) 函数
2020/12/11
词法分析程序
(C程序)
2020/12/11
15
例2-1(2/2)
语义
year(年)、month(月)、day(日)
语义约束条件
0 < month.value < 13 0 < day.value < 32,31,30 0 < year.value < 10000
2020/12/11
16
2.4 编译程序的生成方法
设计目标 目标程序小,执行速度快。 编译程序小,执行速度快。 诊断能力强,可靠性强。 可移植性,可扩充性。
B机的C编译程序(CP2.EXE)。
2020/12/11
19
C 语言 CP1.C
B 代码
C 语言 CP1.C
B 代码
C语言 C语言
A目标 CP1.EXE
C编译

(A机)



1. 用 C语言编制C编译程序(CP1.C) 行
2. A机器上编译该程序,得到(CP1.EXE)
2020/12/11
20
C 语言 CP1.C
2020/12/11
17
表示翻译程序的 T 型图
S
T
I
源语言
2020/12/11
翻译用 语言
目标语 言
18
1)交叉编译
条件:
A 机有 C 语言的编译程序
目的:
实现 B 机的 C 语言的编译
1. 用 C语言编制C编译程序(CP1.C)
2. A机器上编译该程序,得到(CP1.EXE)
3. 在A机器上,运行CP1.EXE编译CP1.C,得到
第二章 计算机语言的实现
程序的解释执行
如:BASIC、DOS 命令,问题:效率低下
输入数据
源程序
2020/12/11
1
源程序
程序的编译执行
目标程序:
机器语言 汇编语言
编译程序 目标程序
输入数据
运行系统
2020/12/11
计算结果
2
2.1 编译系统的需求分析
源程序的分析
词法、语法、语义
目标程序的综合
常见:
Turbo C/C++
Visual Studio for C/C++, Basic etc
JBuilder, BlueJ, NetBean
2020/12/11
13
2.3 编译技术的通用性
把复杂数据看作一条语句 数据格式的分析
利用词法分析、语法分析方法
数据处理的框架
基于语法制导的语义处理框架
编译技术可以用于各种复杂数据的分
A 机 可 执 行
C语言
B 代码
C 语言 CP1.C
B 代码
C 语言 CP1.C
B 代码 CP2.EXE B

CP1.EXE



3. 在A机器上,运行CP1.EXE编译CP1.ຫໍສະໝຸດ Baidu, 得到B机的C编译程序(CP2.EXE)。
2020/12/11
21
2) 编译程序的自展技术
1. 用汇编语言实现一个 C子集的编译程序 2. 用汇编程序处理该程序,得到CP1.EXE 3. 用 C子集编制 C语言的编译程序 4. 用CP1.EXE处理该程序,得到CP2.EXE
语句的翻译、代码生成
标识符与数据目标的绑定(binding)
变量: 存储单元 函数: 目标代码序列
2020/12/11
3
2.2 编译过程
自然语言的翻译过程:
I wish
you
success
主语 谓语 间接宾语 直接宾语
识别单词(拼写正确)、语法检查(顺序 格式)、
语义理解(合理)、组织译文(符合原文 、通顺)
析处理
2020/12/11
14
例2-1(1/2)
DOS 命令 date 的输出格式
例:9-2-1993、09-03-1993、9-03-93
语法
date → month - day - year
词法
month → DIG DIG | DIG day → DIG DIG | DIG year → DIG DIG | DIG DIG DIG DIG
2020/12/11
11
编译程序的组织结构
编译前端
目标机无关部分
1. 词法分析、语法分析、中间代码生成
2. 语义分析、中间代码优化
编译后端
目标机相关部分
1. 目标代码优化
2. 目标代码生成
多遍扫描
常见:前段1.2.和后端1.2.
2020/12/11
12
程序设计环境
集成化的程序设计环境
编辑程序 编译程序 连接程序 ----- 将目标程序连接成可执行程序 调试工具 ----- 跟踪、分析
2020/12/11
4
一个 C 程序的编译过程
源程序: main( ) {
printf(“hello”); } 1. 词法分析
分析字符序列; 识别单词(种别、属 性) 查词法错误; 标识符登记;
2020/12/11
结果 IDN ‘(’ ‘)’ ‘{’ IDN ‘(’ STR ‘)’ ‘;’ ‘}’
注释
s 是 hello 的地址 f 是函数 printf 的地址
8
5. 代码优化
中间代码的优化处理,以求提高执行效率
6. 目标代码生成
将中间代码转换成目标机上的机器指令代 码或汇编代码
MOV R0, #12, 10000001 0001 1100 ADD R0, #4 10000010 0001 0100 MUL R0, R2 11000100 0001 0010
相关文档
最新文档