版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第一章 引论重点:教学目的,教学要求,学习方法,课程的基本内容,编译系统的结构,编译程序的生成。 难点:编译程序的生成。 School of Computer Science & Technology Harbin Institute of Technology2022/8/2612022/8/262第1章 引论1.1 程序设计语言1.2 程序设计语言的翻译1.3 编译程序的总体结构1.4 编译程序的组织1.5 编译程序的生成1.6 本章小结2022/8/2631.1 程序设计语言机器语言(Machine Language)与汇编语言(Assemble Language)0、1代码与助记符:更
2、接近于计算机硬件指令系统的工作高级语言(High Level Language)其表示方法更接近于待解问题的表示方法定义数据、描述运算、控制流程、传输数据如:C、FORTRAN、PASCAL、C+、JAVA、SQL(数据定义、数据操作)命令语言(Command Language)控制系统的工作以功能封装为特征如UNIX上的shell1011 1000 0010 1011 0001 0101 (B82B15)1000 1110 1101 1000 (8ED8)1010 0001 0000 0000 0000 0000 (A10000)1000 1011 0001 1110 0000 0010 0
3、000 0000 (8B1E0200)1011 1001 0000 0000 0000 0000 (B90000)0000 0011 1100 1000 (03C8)0000 0011 1100 1011 (03CB)1000 1011 0000 1110 0000 0100 0000 0000 (8B0E0400)1011 1000 0000 0000 0100 1100 (B8004C)1100 1101 0010 0001 (CD21)int mainint a,b,c;a=1234h;b=5678h;c=a+b;return 0; assume cs:code, ds:datadata
4、 segmentdw 1234h,5678hdata endscode segmentstart:mov ax, datamov ds, ax mov ax, ds:0mov bx, ds:2mov cx, 0add cx, axadd cx, bxmov cx, ds:4mov ax, 4c00hint 21h code endsend start 程序设计语言的分类强制式(命令式)语言(Imperative Language)通过指明一系列可执行的运算及运算的次序来描述计算过程的语言;FORTRAN(段结构)、BASIC、Pascal(嵌套结构)、C程序的层次性和抽象性不高2022/8/2
5、64程序设计语言的分类申述式语言(Declarative Language)着重描述要处理什么,而非如何处理的非命令式语言函数(应用)式语言(Functional Language)基本运算单位是函数,如LISP、ML逻辑式(基于规则)语言(Logical Language)基本运算单位是谓词,如Prolog,Yacc2022/8/265程序设计语言的分类面向对象语言(Object-Oriented Language)以对象为核心,如Smalltalk、C+ 、Java、Ada(程序包)具有识认性(对象)、类别性(类)、多态性和继承性2022/8/2661.2 程序设计语言的翻译翻译程序(Tr
6、anslator)将某一种语言描述的程序(源程序Source Program)翻译成等价的另一种语言描述的程序(目标程序Object Program)的程序。翻译程序源程序目标程序(*.C / *.PAS)(*.OBJ / *.EXE)2022/8/2672022/8/2681.2 程序设计语言的翻译解释程序(Interpreter)一边解释一边执行的翻译程序口译与笔译(单句提交与整篇提交)源程序输入数据计算结果解释程序2022/8/2691.2 程序设计语言的翻译编译程序(Compiler)将源程序完整地转换成机器语言程序或汇编语言程序,然后再处理、执行的翻译程序高级语言程序汇编/机器语言程
7、序源程序目标程序编译程序2022/8/26101.2 程序设计语言的翻译SPCompilerS-SourceO-ObjectOPP-ProgramInput RSRS-Run Sys. Output编译系统(Compiling System)编译系统=编译程序+运行系统支撑环境、运行库等2022/8/26111.2 程序设计语言的翻译其它翻译程序:汇编程序(Assembler)交叉汇编程序(Cross Assembler)反汇编程序(Disassembler)交叉编译程序(Cross Compiler)反编译程序( piler)可变目标编译程序(Retargetable Compiler)并行
8、编译程序(Parallelizing Compiler)诊断编译程序(Diagnostic Compiler)优化编译程序(Optimizing Compiler)2022/8/26121.2 程序设计语言的翻译汇总解释程序数据结果编译系统机器语言程序机器语言程序机器语言程序汇编语言程序高级语言程序汇编语言程序汇编语言程序高级语言程序高级语言程序汇编程序反汇编程序编译程序反编译程序汇编程序反汇编程序编译程序反编译程序汇编程序编译程序交叉汇编程序交叉编译程序可变目标编译程序图1.5 主要翻译程序汇总运行系统编译程序的工作,从输入源程序开始,到输出目标程序结束,与自然语言之间的翻译有很多相似之处。
9、一段英文翻译成中文,需经下列步骤:识别出句子中的单词分析句子的语法结构根据句子的含义进行初步分析对译文进行修饰写出最后的译文编译程序代码优化语法分析语义分析及中间代码生成目标代码生成I am a experience teacherMain()printf(“hello”)构成编译程序各个阶段词法分析1.3 编译程序总体结构2022/8/26141.3 编译程序总体结构目标代码生成器代码优化器语义分析与中间代码生成器语法分析器表 格 管 理出 错 处 理中间代码中间代码目标代码语法单位单词符号词法分析器源程序2022/8/26151、词法分析例:sum=(10+20)*(num+square)
10、; 结果(标识符,sum)(赋值号,=)(左括号, ( )(整常数,10)(加号,+ )(整常数,20)(右括号, ) )(乘号,* )(左括号, ( )(标识符,num)(加号,+ )(标识符,square)(右括号, ) )(分号,; )2022/8/26161、词法分析词法分析由词法分析器(Lexical Analyzer)完成,词法分析器又称为扫描器(Scanner)词法分析器从左到右扫描组成源程序的字符串,并将其转换成单词(记号token)串;同时要:查词法错误,进行标识符登记符号表管理。输入:字符串 输出:(种别码,属性值)序对属性值token的机内表示2022/8/26172、语
11、法分析语法分析由语法分析器(Syntax Analyzer)完成,语法分析器又叫Parser。功能:Parser实现“组词成句” 将词组成各类语法成分:表达式、因子、项,语句,子程序构造分析树指出语法错误指导翻译输入:token序列输出:语法成分2022/8/26182、语法分析sum=(10+20)*(num+square);2022/8/26193、语义分析语义分析(semantic analysis)一般和语法分析同时进行,称为语法制导翻译(syntax-directed translation)功能:分析由语法分析器识别出来的语法成分的语义对于说明语句,获取标识符的属性:类型、作用域等
12、对于可执行语句,语义检查:运算的合法性、取值范围等,生成中间代码变量的静态绑定:数据的相对地址2022/8/26204、中间代码生成中间代码(intermediate Code)例:sum=(10+20)*(num+square); 中间代码表示形式: T1=10+20 T2=num+square T3=T1*T2 sum=T3 2022/8/26214、中间代码生成中间代码的常用表示形式 后缀表示(逆波兰Anti- Polish Notation) sum 10 20 + num square +*=前缀表示(波兰Polish Notation) = sum *+10 20+num squa
13、re 四元式表示(三地址码)(+,10,20,T1)(+,num,square,T2)(*, T1, T2, T3)(=, T3 , , sum) 三元式表示(+,10,20)(+,num,square)(*,)(=, sum,) 语法树2022/8/2622波兰表示问题Lukasiewicz 1929年发明 中缀表示(Infix notation):(a+b)*(-c+d)+e/f波兰表示(Polish / Prefix / Parenthesis-free / Lukasiewicz notation)也就是前缀表示+*+a b+c d/ef 逆波兰表示(Reverse Polish /
14、Suffix / Postfix notation) 也就是后缀表示a b +c d +*ef/+ 运算顺序从左向右2022/8/26234、中间代码生成中间代码的特点简单规范与机器无关易于优化与转换三地址码的另一种表示形式: T1=10+20 T2=num+square T3=T1*T2 sum=T3 其它类型的语句例:printf(“hello”)x := s(赋值)param x(参数)call f(函数调用)注释s 是 hello 的地址f 是函数 printf 的地址2022/8/2624代码优化(optimization)是指对中间代码进行优化处理,使程序运行能够尽量节省存储空间,
15、更有效地利用机器资源,使得程序的运行速度更快,效率更高。当然这种优化变换必须是等价的。 与机器无关的优化与机器有关的优化5、代码优化2022/8/2625与机器无关的优化局部优化常量合并:常数运算在编译期间完成,如8+9*4公共子表达式的提取:在基本块内进行的循环优化强度削减用较快的操作代替较慢的操作代码外提将循环不变计算移出循环2022/8/2626与机器有关的优化寄存器的利用将常用量放入寄存器,以减少访问内存的次数体系结构MIMD、SIMD、SPMD、向量机、流水机存储策略根据算法访存的要求安排:Cache、并行存储体系减少访问冲突任务划分按运行的算法及体系结构,划分子任务(MPMD)20
16、22/8/26276、目标代码生成将中间代码转换成目标机上的机器指令代码或汇编代码确定源语言的各种语法成分的目标代码结构(机器指令组/汇编语句组)制定从中间代码到目标代码的翻译策略或算法目标代码的形式具有绝对地址的机器指令汇编语言形式的目标程序模块结构的机器指令(需要链接程序)2022/8/26287、表格管理管理各种符号表(常数、标号、变量、过程、结构),查、填(登记、查找)源程序中出现的符号和编译程序生成的符号,为编译的各个阶段提供信息。辅助语法检查、语义检查完成静态绑定、管理编译过程Hash表、链表等各种表的查、填技术“数据结构与算法”课程的应用符号表是一个数据结构.每个标识符在符号表中
17、都有一条记录名字记号类型种属addrid1(25)id2(25) b a例:int a,b;int简变 0 4int简变7、表格管理2022/8/26308、错误处理进行各种错误的检查、报告、纠正,以及相应的续编译处理(如:错误的定位与局部化)词法:拼写语法:语句结构、表达式结构语义:类型不匹配、参数不匹配2022/8/2631模块分类分析:词法分析、语法分析、语义分析综合:中间代码生成、代码优化、目标代码生成辅助:符号表管理、出错处理8项功能对应8个模块2022/8/2632语句sum=(10+20)*(num+square);的翻译过程2022/8/26331.4 编译程序的组织根据系统资
18、源的状况、运行目标的要求等,可以将一个编译程序设计成多遍(Pass)扫描的形式,在每一遍扫描中,完成不同的任务。如:首遍构造语法树,二遍处理中间表示,增加信息等。遍可以和阶段相对应,也可以和阶段无关单遍代码不太有效2022/8/26341.4 编译程序的组织编译程序的设计目标规模小、速度快、诊断能力强、可靠性高、可移植性好、可扩充性好目标程序也要规模小、执行速度快编译系统规模较大,因此可移植性很重要为了提高可移植性,将编译程序划分为前端和后端2022/8/26351.4 编译程序的组织前端与源语言有关、与目标机无关的部分词法分析、语法分析、语义分析与中间代码生成、与机器无关的代码优化后端与目标
19、机有关的部分与机器有关的代码优化、目标代码生成2022/8/26361.5 编译程序的生成如何实现编译器?直接用可运行的代码编制太费力!自举-使用语言提供的功能来编译该语言自身。“第一个编译器是怎样被编译的?”2022/8/26371. T形图表示语言翻译的 T 形图源语言实现语言目标语言功能2022/8/2638问题一:如何直接在一个机器上实现C语言编译器?解决:用汇编语言实现一个C子集的编译程序(P0)用汇编程序处理该程序,得到(P2:可直接运行)用C子集编制C语言的编译程序(P3)用P2编译P3,得到P42. 自展2022/8/26394. 用P2编译P3,得到P4语言机器语言机器语言P4子集机器语言机器语言P2获得一个工具子集汇编语言机器语言P01. 用汇编语言实现一个 C子集的编译程序(P0)汇编语言机器语言机器语言子集机器语言机器语言P1P22. 用汇编程序(P1)处理该程序,得到(P2:可直接运行)语言子集机器语言P33. 用C子集编制 C语言的编译程序(P3)2022/8/26403.移植问题二:A机上有一个C语言编译器,是否可利用此编译器实现B机上的C语言编译器?条件:A机有C 语言的编译程序目的:实现B机的C语言的编译语言A编译机器语言B编译机
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024二手乐器买卖合同with演奏演示与教学服务3篇
- 甲方2024年度委托乙方进行技术改造合同
- 装饰公司劳动合同官方版
- 2-Hydroxy-3-4-6-trimethoxychalcone-生命科学试剂-MCE
- 发光字设计公司2024年度创意设计合同3篇
- 2024年度广告创意与定向增发合同2篇
- 2024年度建筑工程水电安装工程招投标合同
- 二零二四年度技术服务合同全案
- 劳动合同书范本
- 2024年度房地产交易法律服务及合同审核2篇
- 2024年二级建造师继续教育题库及答案(500题)
- Flink实时大数据处理技术 课件 01章.Apache Flink概述
- 智慧养老综合服务协议
- 工艺真空系统培训介绍PV系统工艺流程及设备
- (正式版)JTT 1498-2024 公路工程施工安全监测与预警系统技术要求
- 温州市2024届高三第三次适应性考试(三模)英语试卷(含答案解析)
- 2023年四川省绵阳市中考数学试卷
- 农村自建房大修施工委托合同
- MOOC 公文写作规范-黑龙江大学 中国大学慕课答案
- 医院安保工作实施方案
- 小学英语词汇大全(按字母顺序)
评论
0/150
提交评论