第1页:编译原理
编译原理
第2页:第一章引论
第一章引论
- 本课程介绍程序设计语言编译程序构造的基本原理和基本实现技术.
第3页:第一章引论(续)
第一章引论(续)
- 编译理论与方法
- 计算机科学与技术中理论和实践相结合的最好典范
- ACM图灵奖,授予在计算机技术领域作出突出贡献的科学家
- 程序设计语言、编译理论与方法约占1/3
第4页:一.什么是编译程序
一.什么是编译程序
- 翻译程序把某一种语言程序(称为源语言程序)等价地转换成另一种语言程序(称为目标语言程序)的程序
第5页:一.什么是编译程序(续)
一.什么是编译程序(续)
- 编译程序(compiler)把某一种高级语言程序等价地转换成另一种低级语言程序(如汇编语言或机器语言程序)的程序诊断编译程序优化编译程序交叉编译程序可变目标编译程序
第6页:一.什么是编译程序
一.什么是编译程序
- 解释程序把源语言写的源程序作为输入,但不产生目标程序,而是边解释边执行源程序本身源程序结果解释程序解释执行
第7页:一.什么是编译程序(续)
一.什么是编译程序(续)
编译程序vs.解释程序编译解释
第8页:二.编译过程
二.编译过程
- 把英文翻译为中文
- 识别出句子中的一个个单词;
- 分析句子的语法结构;
- 根据句子的含义进行初步翻译;
- 对译文进行修饰;
- 写出最后的译文。词法分析语法分析中间代码产生优化目标代码产生
第9页:二.编译过程(续)
二.编译过程(续)
- 编译程序的工作一般分为五个阶段:
- 词法分析
- 语法分析
- 中间代码产生
- 优化
- 目标代码产生
第10页:1.词法分析
1.词法分析
- 任务
- 输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单词符号。
- 依循的原则
- 构词规则
- 描述工具
- 有限自动机
- FOR I
- = 1 TO 100 DO保留字标识符等符整常数保留字整常数保留字
第11页:2.语法分析
2.语法分析
- 任务
- 在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位。
- 依循的原则
- 语法规则
- 描述工具
- 上下文无关文法
- Z
- =X+0.618*Y算术表达式,赋值语句
第12页:3.中间代码产生
3.中间代码产生
- 任务
- 对各类不同语法范畴按语言的语义进行初步翻译。
- 依循的原则
- 语义规则
- 中间代码
- 三元式,四元式,树形结构等
- Z
- =X+0.618*Y翻译成四元式为(1)*0.618YT1(2)+XT1T2(3):=T2_Z
第13页:4.优化
4.优化
- 任务
- 对于前阶段产生的中间代码进行加工变换,以期在最后阶段产生更高效的目标代码。
- 依循的原则
- 程序的等价变换规则FORK:=1TO100DOBEGINX:=I+1;M:=I+10*K;N:=J+10*K;END
第14页:中间代码四元式表
中间代码四元式表:下表按序号列出各条四元式及其注释。
中间代码(一)四元式序列表| 序号 | 运算符 | 运算对象与结果 | 注释 |
|---|
| 1 | := | 1K | K:=1 |
|---|
| 2 | j< | 100K(10) | if (100<K)goto (10) |
|---|
| 3 | + | I1X | X:=I+1 |
|---|
| 4 | * | 10KT1 | T1:=10*K |
|---|
| 5 | + | IT1M | M:=I+T1 |
|---|
| 6 | * | 10KT2 | T2:=10*K |
|---|
| 7 | + | JT2N | N:=J+T2 |
|---|
| 8 | + | K1K | K:=K+1 |
|---|
| 9 | j | (2)goto | (2)(10)400次加法200次乘法 |
|---|
第15页:转换后的等价代码四元式表
转换后的等价代码四元式表:下表按序号列出各条四元式及其注释。
转换后的等价代码(二)四元式序列表| 序号 | 运算符 | 运算对象与结果 | 注释 |
|---|
| 1 | + | I1X | X:=I+1 |
|---|
| 2 | := | IM | M:=I |
|---|
| 3 | := | JN | N:=J |
|---|
| 4 | := | 1K | K:=1 |
|---|
| 5 | j< | 100K(10)if | (100<K)goto (10) |
|---|
| 6 | + | M10M | M:=M+10 |
|---|
| 7 | + | N10N | N:=N+10 |
|---|
| 8 | + | K1K | K:=K+1 |
|---|
| 9 | j | (5)goto | (5)(10)301次加法 |
|---|
第16页:5.目标代码产生
5.目标代码产生
- 任务
- 把中间代码变换成特定机器上的目标代码。
- 绝对指令代码
- 可直接运行
- 可重新定位指令代码
- 需要连接装配
- 汇编指令代码
- 需要进行汇编
- 依赖于硬件系统结构和机器指令的含义
- 目标代码三种形式:
第17页:5.目标代码产生(续)
5.目标代码产生(续)
第18页:5.目标代码产生
5.目标代码产生
例: b=a+2MOV a, R1ADD #2, R1MOV R1, b0001010000000000*00110110000000100100010000000100*L=00001111000101000000111100110110000000100100010000010011
第19页:三.编译程序结构
三.编译程序结构
第20页:三.编译程序结构(续)
三.编译程序结构(续)
- 析器语义分析与中间代码生成器优化段源程序表格管理出错处理目标代码生成器
第21页:2.表格和表格管理
2.表格和表格管理
- 常见的表格
- 符号名表,常数表,标号表,入口名表,过程引用表。
- 格式
- 名字信息
第22页:PASCAL过程INCWAP示例
PASCAL过程INCWAP示例
PASCAL程序段:PROCEDURE INCWAP(M,N:INTEGER);LABEL START;VARK:INTEGER;BEGINSTART:K:=M+1;M:=N+4;N:=K;END.
第23页:PASCAL过程INCWAP示例(续)
PASCAL过程INCWAP示例(续)
N:INTEGER);LABEL START;VARK:INTEGER;BEGINSTART:K:=M+1;M:=N+4;N:=K;END.
第24页:PASCAL过程INCWAP示例
PASCAL过程INCWAP示例
N:INTEGER);LABEL START;VARK:INTEGER;BEGINSTART:K:=M+1;M:=N+4;N:=K;END.
第25页:PASCAL过程INCWAP示例(续)
PASCAL过程INCWAP示例(续)
N:INTEGER);LABEL START;VARK:INTEGER;BEGINSTART:K:=M+1;M:=N+4;N:=K;END.
第26页:PASCAL过程INCWAP示例
PASCAL过程INCWAP示例
N:INTEGER);LABEL START;VARK:INTEGER;BEGINSTART:K:=M+1;M:=N+4;N:=K;END.
第27页:
第28页:PASCAL过程INCWAP示例
PASCAL过程INCWAP示例
N:INTEGER);LABEL START;VARK:INTEGER;BEGINSTART:K:=M+1;M:=N+4;N:=K;END.
第29页:3.出错处理
3.出错处理
- 出错处理程序
- 发现源程序中的错误,把有关错误信息报告给用户
第30页:3.出错处理(续)
3.出错处理(续)
- 所谓"遍",就是对源程序或源程序的中间表示从头到尾扫描一次。
- 阶段与遍是不同的概念。一遍可以由若干段组成,一个阶段也可以分若干遍来完成。
第31页:5.编译前端与后端
5.编译前端与后端
- 编译前端
- 与源语言有关,如词法分析,语法分析,语义分析与中间代码产生,与机器无关的优化
- 编译后端
- 与目标机有关,与目标机有关的优化,目标代码产生
- 优点
- 减少对内存容量的要求,程序逻辑结构清晰;优化更充分,有利于移植。
- 不足
- 编译程序运行的效率低源语言中间语言目标语言前端后端
第32页:5.编译前端与后端(续)
5.编译前端与后端(续)
- va编译器Java源程序(.java)Java虚拟机代码(.class)解释执行
第33页:四.编译程序与程序设计环境
四.编译程序与程序设计环境
- 程序设计环境
- 编辑程序
- 编译程序
- 连接程序
- 调试工具
- 集成化的程序设计环境
第34页:四.编译程序与程序设计环境(续)
四.编译程序与程序设计环境(续)
ting SystemCommon Language RuntimeADO.NETData and XMLASP.NET: WebServices & Web FormsWindowsFormsCommon Language SpecificationVisual Studio.NETVBC++C#JScript…
第35页:五.编译程序生成
五.编译程序生成
- 优点
- 可以针对具体的机器,充分发挥计算机的系统功能。生成的程序效率高。
- 缺点
- 程序难读、难写、易出错、难维护、生产的效率低。
第36页:五.编译程序生成(续)
五.编译程序生成(续)
- 优点
- 程序易读、易理解、容易维护、生产的效率高。
- 缺点
- 难以充分发挥计算机的系统功能,生成的程序效率低。
第37页:五.编译程序生成
五.编译程序生成
- 高级语言书写利用已有的某种语言的编译程序实现另一语言的编译程序。L1语言A代码P1:A代码L2语言A代码P2:L1语言L2语言A代码P2:A代码同一台机器不同的语言
第38页:五.编译程序生成(续)
五.编译程序生成(续)
- 移植方法把一种机器上的编译程序移植到另一种机器上。L语言A代码P1:A代码L语言B代码P2:L语言L语言B代码P2:A代码L语言B代码P2:L语言L语言B代码P2:B代码同一种语言不同的机器
第39页:五.编译程序生成
五.编译程序生成
第40页:五.编译程序生成(续)
五.编译程序生成(续)
- 编译程序自动产生编译程序-编译程序,编译程序书写系统LEX词法分析程序产生器YACC语法分析程序产生器编译程序自动产生器L语言的语法描述语义描述目标语言或机器描述L语言的编译程序
第41页:六.关于学习编译原理
六.关于学习编译原理
- 构造编译程序的前提:
- 掌握源语言
- 掌握目标语言
- 掌握编译方法
第42页:六.关于学习编译原理(续)
六.关于学习编译原理(续)
- 意义:
- 学习编译程序构造原理,技术
- 更好地理解高级语言
- 编译的原理和方法有助于构造一些实用的工具
第43页:六.关于学习编译原理
六.关于学习编译原理
- 课程特点:
- 理解性
- 技术性
- 考核:
- 作业及上机实习:30%
- 笔试:70%
第44页:六.关于学习编译原理(续)
六.关于学习编译原理(续)
- Compilers Principles,Techniques andTools,A. V. AHO
- 编译原理及编译程序构造北航出版社,高仲信,金茂忠
- 编译原理典型题解析与实战模拟刘春林、王挺等
- 编译原理例解析疑赵雄芳等