编译原理蒋宗礼课件第1章精品.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理蒋宗礼课件第1章精品

* 7、出错处理 进行各种错误的检查、报告、纠正,以及相应的续编译处理(如:错误的定位与局部化) 词法:拼写…… 语法:语句结构、表达式结构…… 语义:类型不匹配、参数不匹配…… * 8、符号表管理 管理各种符号表(常数、标号、变量、过程、结构……),查、填(登记、查找)源程序中出现的符号和编译程序生成的符号,为编译的各个阶段提供信息。 辅助语法检查、语义检查 完成静态绑定、管理编译过程 Hash表、链表等各种表的查、填技术 “数据结构与算法”课程的应用 * 模块分类 分析:词法分析、语法分析、语义分析 综合:中间代码生成、代码优化、目标代码生成 辅助:符号表管理、出错处理 8项功能对应8个模块 * 语句sum=(10+20)*(num+square);的翻译过程 * 1.4 编译程序的组织 根据系统资源的状况、运行目标的要求……等,可以将一个编译程序设计成多遍(Pass)扫描的形式,在每一遍扫描中,完成不同的任务。 如:首遍构造语法树,二遍处理中间表示,增加信息等。 遍可以和阶段相对应,也可以和阶段无关 单遍代码不太有效 * 1.4 编译程序的组织 编译程序的设计目标 规模小、速度快、诊断能力强、可靠性高、可移植性好、可扩充性好 目标程序也要规模小、执行速度快 编译系统规模较大,因此可移植性很重要 为了提高可移植性,将编译程序划分为前端和后端 * 1.4 编译程序的组织 前端 与源语言有关、与目标机无关的部分 词法分析、语法分析、语义分析与中间代码生成、与机器无关的代码优化 后端 与目标机有关的部分 与机器有关的代码优化、目标代码生成 * * 编译原理引论 * 前端和后端的组合 某一编译程序的前端加上相应不同的后端可以为不同的机器构成同一个源语言的编译程序 不同语言编译的前端生成某一种中间语言,在使用一个共同的后端,可以为同一机器生成几个语言的编译程序 * * 编译原理引论 * Java语言环境(一个前端+多个后端) 编译环境 运行环境(Java平台) Java 源程序 (*.java) Java 编译程序 Java BYTECODES (*.class) 类转载器 BYTECODES 验证器 Java 类库 Java虚拟机 解释程序 即时编译程序 硬件 Java BYTECODES (来自本地的 或经由网络的) * .NET(多个前端+一个后端) * 1.5 编译程序的生成 如何实现编译器? 直接用可运行的代码编制——太费力! 自举-使用语言提供的功能来编译该语言自身 “第一个编译器是怎样被编译的?” * 1. T形图 表示语言翻译的 T 形图 源语言 实现语言 目标语言 功能 * 问题一:如何直接在一个机器上实现C语言编译器? 解决: 用汇编语言实现一个C子集的编译程序(P0—人) 用汇编程序处理该程序,得到(P2:可直接运行) 用C子集编制C语言的编译程序(P3—人) 用P2编译P3,得到P4 2. 自展 * 4. 用P2编译P3,得到P4 C语言 机器语言 机器语言 P4 C子集 机器语言 机器语言 P2 获得一个工具 C子集 汇编语言 机器语言 P0 1. 用汇编语言实现一个 C子集的编译程序(P0—人) 汇编语言 机器语言 机器语言 C子集 机器语言 机器语言 P1 P2 2. 用汇编程序(P1)处理该程序,得到(P2:可直接运行) C语言 C子集 机器语言 P3 3. 用C子集编制 C语言的编译程序(P3—人) * 3.移植 问题二:A机上有一个C语言编译器,是否可利用此编译器实现B机上的C语言编译器? 条件:A机有C 语言的编译程序 目的:实现B机的C语言的编译 C语言 A机器 A机器 C语言 B机器 B机器 要完成的任务 * C语言 C语言 B机器 C语言 A机器 B机器 C语言 B机器 B机器 C语言 C语 言 B机器 C语言 A机器 A机器 C语言 A机器 B机器 需要编写的程序 1)问题的分析 * 1. (人)用C语言编制B机的C编译程序P0(C→B) (A机的C编译P1)编译P0,得到在A机上可运行的P2(C→B) C语言 C语 言 B机器 C语言 A机器 A机器 C语言 A机器 B机器 P0 P1 P2 获得一个工具 2)问题的解决办法 * 3.(A机的P2)编译P0,得到在B机上可运行的P3(C→B) P2 C语言 C语言 B机器 C语言 A机器 B机器 C语言 B机器 B机器 P0 P3 C语言 C语 言 B机器 C语言 A机器 A机器 C语言 A机器 B机器 P0 P1 P2 获得的工具 * 4.本机编译器的利用 问题三: A机上有一个C语言编译器,现要实现一个新语言NEW的编译器?能利用交叉编译技术么? 用C编写NEW的编译,并用C编译器编译它 NEW语言 C语 言 A机器 C语

文档评论(0)

bodkd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档