1 / 47

指导教师 : 杨建国 二零零七年十一月

编 译 原 理. 指导教师 : 杨建国. 指导教师 : 杨建国 二零零七年十一月. 二零零七年十月. 联 系 方 式. QQ : 383108986 MSN : yang2003915@hotmail.com 电子邮件: yangjg@ecust.edu.cn 个人网站: www.snwei.com( 盛威网 ). 《 编译原理 》 课程说明. 实际上课时间: 5* 16 周 理论和实践并重的课程 按要求完成相应的实验(包括实验报告)和作业

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. 联 系 方 式 • QQ : 383108986 • MSN : yang2003915@hotmail.com • 电子邮件: yangjg@ecust.edu.cn • 个人网站: www.snwei.com(盛威网)

  3. 《编译原理》课程说明 • 实际上课时间: 5* 16周 • 理论和实践并重的课程 • 按要求完成相应的实验(包括实验报告)和作业 • 关于考试:作业、实验、考勤 30%;上机考试10%;期 末考试60%(迟到、早退、旷课、上机玩游戏和聊天、 带签名扣3分)

  4. 开设《编译原理》目的 系统地向学生讲述编译系统的结构、工作流程及编译程序各组成部分的设计原理和实现技术,使学生通过本课程的学习之后,既掌握编译理论和方法方面的基本知识,也具有设计、实现、分析和维护编译程序等方面的初步能力

  5. 《编译原理》知识结构

  6. 《编译原理》教材及主要参考书 • 教材:《编译原理》(第2版),张素琴、吕映芝、蒋维 杜、戴桂兰,清华大学出版社,2005.10 • 参考书: • ◎《编译技术》(第二版),钱焕延,东南大学出版社, • 2005.1 • ◎《编译原理课程设计》,王雷、刘志成、周晶,机械 • 工业出版社,2005.3 • ◎《编译原理学习辅导》,张伟,清华大学出版社, • 2005.7

  7. 《编译原理》教材及主要参考书 ◎《编译原理习题与解析》,伍春香,清华大学出版社, 2001.8 ◎《编译原理》,蒋立源,西北工业大学出版社,1996.2 ◎ 参考教案:清华大学教案、视频(清华大学、东南大学、 北京交通大学、西北工业大学、四川电视大学) ◎ 《编译原理》,何炎祥,高等教育出版社,2004.8 ◎ 《计算机编译原理-编译程序构造实践》,张幸儿,科 学出版社,2005.7

  8. 《编译原理》教材及主要参考书 ◎《编译原理》,Alfred V.Aho、Ravi Sethi Jeffery D.Ullman著,李建中、姜守旭译 ,机械工业出版社, 2006.2 ◎《现代编译原理C语言描述》,Andrew W.Appel著,赵克  佳、黄春、沈志宇译,人民邮电出版社,2006.4 ◎《编译原理及实践》,Kenneth C.Louden著,冯博琴、冯  岚等译,机械工业出版社,2003.3

  9. 编 译 原 理 教 案 • 第一章 引论 • 第二章 PL/O编译程序的实现 • 第三章 文法和语言 • 第四章 词法分析 • 第五章 自顶向下语法分析方法 • 第六章 自底向上优先分析 • 第七章 LR分析

  10. 编 译 原 理 教 案 • 第八章 语法制导翻译和中间代码生成 • 第九章 符号表 • 第十章 目标程序运行时的存储组织 • 第十一章 代码优化 • 第十二章 代码生成 • 第十三章 编译程序的构造 • 第十四章 面向对象语言的编译 • 第十五章 编译程序的面向对象构造

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

  12. 知识结构

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

  14. 例如,在国产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

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

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

  17. 又如求半径为 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.

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

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

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

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

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

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

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

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

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

  27. 语义分析: 主要任务:根据语法结构分析其含义,并用某中间语言      表示出来,亦就生成中间代码,或者直接生      成目标代码 三元式定义为如下形式:(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)

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

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

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

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

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

  33. 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. { 程序结束 }

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

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

  36. (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

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

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

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

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

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

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

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

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

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

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

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

More Related