1 / 40

指导教师 : 杨建国

编 译 原 理. 指导教师 : 杨建国. 二零一零年三月. 第一章 引论. 第一节 程序设计语言. 第二节 编译程序. 第三节 源程序执行的途径. 第四节 编译程序的结构. 第五节 编译程序的开发. 代码优化. 目标代码生成. 知识结构. 第一章 引论. 1.1 程序设计语言. 一 . 机器语言. 一般来说,计算机可以直接执行的代码形式的指令系统  称为 机器语言. 例如,在国产 DJS——21 计算机中,取、除、减、送的  指令代码分别为: 002 , 00E , 009 , 004.

nancy
Download Presentation

指导教师 : 杨建国

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 编 译 原 理 指导教师:杨建国 二零一零年三月

  2. 第一章 引论 • 第一节 程序设计语言 • 第二节 编译程序 • 第三节 源程序执行的途径 • 第四节 编译程序的结构 • 第五节 编译程序的开发

  3. 代码优化 目标代码生成 知识结构

  4. 第一章 引论 • 1.1 程序设计语言 一.机器语言 • 一般来说,计算机可以直接执行的代码形式的指令系统  称为机器语言

  5. 例如,在国产DJS——21计算机中,取、除、减、送的例如,在国产DJS——21计算机中,取、除、减、送的  指令代码分别为:002,00E,009,004 • 假定a、b、c、x四个单元的地址码分别为:0123,1234, 2103,0576,那么要计算 x:= a / b – c • 其机器语言程序为: • 002 0123 • 00E 1234 • 009 2103 • 004 0576

  6. 二.汇编语言 • 汇编语言就是计算机符号形式的指令系统 • 如对应于取、除、减、送采用下列符号:CLA,DIV, SUB,STO • 那么上述程序的汇编语言程序: • CLA a • DIV b • SUB c • STO x

  7. 三.高级语言 • 常用的高级语言:BASIC、FORTRAN、ALGOL、 • PASCAL、COBOL、C 等 • 上例用 BASIC 语言写为赋值语句为: x = a / b - c • 用 PASCAL 语言写为赋值语句为: x:=a / b - c

  8. 又如求半径为 r 的圆面积和周长的问题,用PASCAL语言  编写的程序是: Program scr ( input , output ) ; const pi = 3.1416 ; var s, c, r : real ; begin read ( r ) ; s : = pi * sqr ( r ) ; c : = 2 * pi * r ; write ( r, s, c) End.

  9. 四.G语言 • LabVIEW(Laboratory Virtual instrument Engineering) • 一种图形化的编程语言,广泛地被工业界、学术界和研究  实验室所接受,视为一个标准的数据采集和仪器控制软件 • LabVIEW集成了与满足GPIB、VXI、RS-232和RS-485协  议的硬件及数据采集卡通讯的全部功能 • 它内置了便于应用TCP/IP、ActiveX等软件标准的库函数 • 利用它可以方便地建立自己的虚拟仪器,其图形化的界面  使得编程及使用过程都生动有趣

  10. (翻译) (B语言) (A语言) 源程序 翻译程序 目标程序 汇编语言 汇编程序 机器语言 编译程序 高级语言 汇编(机器)语言 源程序 解释程序 无 • 1.2 编译程序 • 计算机实现程序设计语言的方法 • 第一种方法:对程序进行翻译 • 第二种方法:对程序进行解释

  11. 1.3 源程序执行的途径 一.编译途径 1.定义:将一份源程序从头至尾翻译成某台计算机上的机     器语言,让机器接受,然后执行之,并允许重     复执行若干次

  12. 源程序 源程序 目标程序 编译程序 编译程序 汇编语言程序 汇编程序 运行结果 目标代码 初始数据 运行程序 初始数据 运行程序 运行结果 3.三大阶段: 2.两大阶段: 编译 阶段 编 译 阶 段 汇编 阶段 运 行 阶 段 运行 阶段

  13. 初始数据 源程序 解释程序 结 果 二.解释途径 1.定义:就是对于源程序的一个语句,把它翻译成相应的  机器语言, 并让计算机立即执行 2.解释执行阶段:

  14. 3.两种方式: • 直接解释执行 • 把源程序先转换成以词为单位的中间代码程序,然后对 中间代码程序逐句解释执行

  15. 1. 4 编译程序的结构 一.编译程序的组成 1.单词和属性字: • 单词是指语言中具有独立意义的最小语法单位 • 单词的属性是指单词特征和特性的有关信息 • 属性字是指单词的一种机内表示 • 属性字的特点:一是长度统一,二是刻划了单词的属性 • 属性字的组成:

  16. 信 息 表 管 理 程 序 源 程 序 词法 分析 程序 语法 分析 程序 语义 分析 程序 中间 代码 生成 代码 优化 程序 目标 代码 生成 目标代码 错 误 检 查 和 处 理 程 序 2.编译程序的组成:

  17. 词法分析: 主要任务:从左到右扫描源程序,识别单词及其有关属性 , 并转换成属性字 例如:对于 PASCAL 语言中的赋值语句 x : = 2 * a + b

  18. 语法分析: 主要任务:分析源程序的结构, 判别它是否为相应程序设计      语言中的一个合法程序

  19. 语义分析: 主要任务:根据语法结构分析其含义,并用某中间语言      表示出来,亦就生成中间代码,或者直接生      成目标代码 三元式定义为如下形式:(op, a1, a2) 对于表达式:a + b * c / d 则有三元式: (1) ( *, b, c) (2) (/, (1), d) (3) (+, a , (2) ) 于是 x : = 2 * a + b 的中间代码形式为: (1) ( *, 2, a) (2) (+, (1), b) (3) (:=, (2), x)

  20. 中间代码生成: • 主要任务:产生源程序的一个显示中间表示 • 使用中间语言的好处:使编译算法更加清晰,便于优  化,还使编译程序的更多部分不依赖于目标机器 • 常见的中间代码形式: 逆波兰表示、三元式、四元式及  树形结构等等

  21. 代码优化: 主要任务:为了提高目标程序的质量而进行的工作。所 谓目标程序的优化,就是尽量缩短运行时间和尽量最少 占用存储空间

  22. 代码生成: 主要任务:完成从中间代码到目标代码的生成工作。如 果在语义分析时已直接生成了目标代码,则无需做此项 工作

  23. 错误检查和处理程序: 主要任务:查错和纠错

  24. 信息表管理程序: • 主要任务:建立一批不同用途的表格 + 保持一些专用的表格 • 一般信息表的登记项由关键字和与之相关联的信息组成

  25. 3.编译程序的简单模型 例如求半径为 r 的圆面积和周长的问题, 用PASCAL语言编写的程序是: Program scr ( input , output ) ; { 程序首部 } var s, c, r : real ; { 说明 r, s, c 是实型变量 } begin s : = pi * sqr ( r ) ; { 计算圆的面积 s } c : = 2 * pi * r ; { 计算圆的周长 c } End. { 程序结束 }

  26. (1) 词法分析: Programscr(input,output); vars, c,r:real; begins: =3.14*sqr(r); c: =2*3.14*r; End.

  27. : = 2 * c 3.14 * r < 变量 > < 常量 > < 乘除号 > < 常量 > < 乘除号 > < 变量 > < 因子 > < 因子 > < 因子 > < 项 > < 项 > < 项 > < 表达式 > < 赋值语句 > (2) 语法分析:

  28. (3) 语义分析: (1)( *, 3.14, r ) (2)(*, (1), r) (3)(:=, (2), s) (4)(*, 2, 3.14) (5)(*, (4) , r ) (6)(:=, (5) , c) (4) 代码优化: (1)( *, 3.14, r ) (2)(*, (1), r) (3)(:=, (2), s) (4)(*, 6.28, r) (5)(:=, (4) , c ) • 思考:还可以怎么优化? • 答案:3.14*r

  29. (5) 目标代码生成: (1)( *, 3.14, r ) (2)(*, (1), r) (3)(:=, (2), s) (4)(*, 2, (1) ) (5)(:=, (4) , c)

  30. 词法分析 分 析 错 误 处 理 语法分析 语义分析 综 合 优 化 代码生成 目标程序 二.编译程序的逻辑结构 1.编译程序的逻辑结构 源程序 表 格 管 理

  31. 2.编译程序的趟:   所谓一趟是指一个编译程序在编译时刻把源程序或与之 等价的中间程序从头到尾扫描一遍,并转换成为紧密相邻的 等价程序的全过程

  32. 语法分析 目标程序 词法分析 语义分析 • 单趟扫描: 源程序 • 优点:编译速度快、效率高、编译程序总长度短 • 缺点:编译程序复杂、占用存贮空间大

  33. 单遍扫描的编译程序

  34. 源 程序 等价程序1 词法分析 语法分析 等价程序2 语义分析 等价程序3 优 化 等价程序4 目标程序 代码生成 • 多趟扫描: • 优点:各趟所要完成的功能明确而单纯、编译程序较容     易且便于分工、存贮空间节省 • 缺点:编译程序的总长度长、各趟的工作有些要重复进行、     效率较低

  35. 1. 5 编译程序的开发 一.编译程序的开发过程 1.认真分析、合理分工 2.算法设计、方案确定 3.语言选择、编制程序 4.调试程序、确保质量 5.资料整理、文本形成

  36. 二.编译程序的开发技术 1.系统程序设计语言(系统编程语言): 能编写编译程序或其它系统软件的高级语言

  37. 2.编译程序的开发技术: • 自编译:用某一高级语言书写其本身的编译程序 • 交叉编译:A机器上的编译程序能产生B机器上的目标  代码

  38. 自展:首先确定一个非常简单的核心语言L0,用机器语自展:首先确定一个非常简单的核心语言L0,用机器语  言或汇编语言书写出它的编译程序T0,再把语言L0扩充  到L1,此时L0 L1并用L0编写L1的编译程序T1,再把  语言L1扩充为L2,有L1 L2并用L1编写L2的编译程序 T2,,如此逐步扩展下去,好似滚雪球一样,直到  我们所要求的编译程序 • 移植:将 A 机器上的某高级语言的编译程序搬到 B 机  器上运行

  39. 编译程序 自动生成软件 编译程序 3.编译程序的自动生成问题: 源语言的定义 机器语言的描述 • 如UNIX操作系统下的软件工具Lex和Yacc等 • 编译程序生成软件工具还有LLama和Occs • 形式语言学和编译技术的发展已能实现编译程序的自动生  成,但是目前的主要问题是时间效率和空间节省问题

  40. 第1章 作业题 P11: 1. 2. 3. 4.

More Related