- 1、本文档共34页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理 第一章 编译概述 1.1 程序设计语言 高级语言与低级语言相比具有以下优点: 为什么需要编译程序 1.2 翻译程序 编译到被执行的过程 编译到被执行的过程 编译到被执行的过程 1.3 编译程序的组成 1.3.1词法分析程序 1.3.2.语法分析程序 1.3.2.语法分析程序 1.3.3语义分析及中间代码生成程序 1.3.3语义分析及中间代码生成程序 1.3.4.代码优化 1.3.5.目标代码生成 1.3.6.符号表管理 1.3.7.错误处理 1.4 编译程序的结构 1.4.1单遍编译程序 1.4.2多遍编译程序 1.4.3编译程序分遍的优缺点 1.4.4“端”的概念 1.5 编译程序的前后处理器 1.5.1预处理器 1.5.2 汇编程序 1.5.3 连接装入程序 1.6 TEST语言与编译器 1.6.1 TEST语言 1.6.2 TEST编译器 1.6.3 TEST机 程序语言中涉及编译的一些问题? 习题 一 TEST编译器包括以下的C文件, TESTmain.c: 主程序,先后调用词法分析、语法分析及语义分析和代码生成。 TESTscan.c: 词法分析,接收用TEST语言编写的程序,输出的单词符号程序将作为语法分析的输入。 TESTparse.c:语法、语义分析及TEST机的汇编代码生成,如果有错误,报告错误。 我们用一个抽象机的汇编语言作为TEST编译器的目标语言。TEST机的指令仅能作为TEST语言的目标。实际上,TEST机具有精减指令集计算机的一些特性。TEST机的模拟程序直接从一个文件中读取汇编代码并执行它,因此避免了由汇编语言翻译为机器代码的过程。但是,这个模拟程序并非是一个真正的汇编程序,它没有符号地址或标号。因此, TEST机编译器必须仍然计算跳转的绝对地址。此外为了避免与外部的输入/输出例程连接的复杂性,TEST机有内部整型的I / O设备;在模拟时,它们都对标准设备读写。附录C列出了用C语言编写的TEST机模拟程序。 * * 参考教材: 1.编译原理及实现 孙悦红编,清华出版社 2.编译原理及编译程序构造 高仲仪、金茂忠 编 北京航空航天大学出版社 3.编译原理 吕映芝编,清华出版社 教师:孙悦红 E-MAIL:SUNYUEHONG60@163.COM 总学时:64 实验:12 实验安排: 程序设计语言之所以能由专用的机器语言发展到现今通用的多种高级语言,就是因为有了编译技术。编译技术是计算机专业人员必须具备的专业基础知识,它涉及程序设计语言、形式语言与自动机、计算机体系结构、数据结构、算法分析与设计、操作系统以及软件工程等各个方面。现在程序员大多数使用各种高级程序设计语言编写程序,而计算机只能识别用二进制数0、1表示的指令和数所构成的机器语言程序,用高级语言编写的程序不能直接在机器上运行,要想运行它并得到预期的结果,必须将源程序转换成等价的目标程序,这个转换过程就是所谓的编译。 在计算机发展的初期,使用机器语言编写程序。机器语言是由0、1表示的机器指令组成,不直观,难写、难读、难记,易出错,调试极不方便,由于不同类型的计算机使用不同的机器指令,程序员必须针对某种类型的机器编程,编写的程序不适于移植,因此限制了计算机的推广与使用。 为了便于记忆、阅读和检查,用较直观的符号来代替机器指令,进一步发展成为汇编语言。汇编语言采用比较直观具有含义的指令助记符表示每条机器指令,同时为方便编程,还提供了若干宏指令对应一组机器指令,从而完成一些特定的功能。但汇编指令依赖于机器,对问题的描述处于低层次,没有高级语言中的条件、循环等控制结构,编程人员必须考虑寄存器、内存的分配,使用仍不方便,程序设计的效率仍然很低。 接近自然语言的程序设计语言,如Basic、C、Pascal语言等等。这类语言完全摆脱了机器指令的约束,用它编写的程序接近自然语言和习惯上对算法的描述,故称为面向用户的语言。后来,又相继出现许多专门用于某个应用领域问题的专业语言,例如用于数据库操作的SQL语言,这类语言称为面向问题的语言。 1)??高级程序设计语言不依赖于具体的机器,对计算机了解较少的人也可以学习和使用,有良好的可移植性,在一种类型的机器上编写的程序无须做很大改动就能在别的机器上运行。 2)???编写高级语言程序时,不用考虑具体的寄存器、内存的分配,不用知道如何实现将数据的外部形式转换成计算机内部形式,也不必了解机器的硬件。 3)???每条高级语言语句对应于多条汇编指令或机器指令,编程效率高。 4)???高级语言提供了丰富的数据结构和控制结构,提高了问题的表达能力,降低了程序的复杂性。 5) 高级语言接近于自然语言,编程更加容易,编写出的程序有良好的可读
文档评论(0)