- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理 成绩 考勤 10% 作业 10% 实验 10% 期末考试 70% 参考教材 1.编译原理及编译程序构造 高仲仪、金茂忠 编 北京航空航天大学出版社 2.编译原理 孙悦红,清华出版社 第一章 编译概述 1.1 程序设计语言 高级语言与低级语言相比具有以下优点: 为什么需要编译程序 1.2 翻译程序 1.3.4.代码优化 1.3.5.目标代码生成 1.3.7.错误处理 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,一旦能明白TEST语言的编译技术,就能够很容易地理解各种语言的编译器了。在第3、4、9章里,我们以这种小语言为示例,讲解编译技术的具体实现,而且在附录B中列出该语言完整的编译程序代码。 TEST语言的程序结构很简单,它在语法上相当于C的函数体:是由一对花括号扩起来的语句序列。另外,它既无过程也无声明。表达式语句以及控制语句的写法都与C语言类似,一条声明语句只能声明一个整型简单变量变量、没有数组,控制语句只有三个: if、while和for语句,这三个控制语句本身也可包含语句序列,表达式也局限于布尔表达式和整型算术表达式。布尔表达式由对两个算术表达式的比较组成,该比较使用、=、、=、==和!=比较算符。算术表达式可以包括整型常数、变量、参数以及4个算符+、-、*、/,此外还有一般的数学属性。另外,还可以有复合语句。为了能实现输入输出,我们又添加了read语句和write语句。在花括号中可以有注释,注释用“/*”和“*/”括起来,但注释不能嵌套。 例如,下段程序就是采用TEST语言编制的计算阶乘的程序。 { int i; int n; int j; j=1; read n; for (i=1;i=n;i=i+1) j=j*i; write j; } TEST编译器包括以下的C文件, TESTmain.c: 主程序,先后调用词法分析、语法分析及语义分析和代码生成。 TESTscan.c: 词法分析,接收用TEST语言编写的程序,输出的单词符号程序将作为语法分析的输入。 TESTparse.c:语法、语义分析及TEST机的汇编代码生成,如果有错误,报告错误。 * * 教师:李荣 E-MAIL:rongli@lixin.edu.cn 总学时:40 实验:10 实验安排:5,9,12,14,15周 程序设计语言之所以能由专用的机器语言发展到现今通用的多种高级语言,就是因为有了编译技术。编译技术是计算机专业人员必须具备的专业基础知识,它涉及程序设计语言、形式语言与自动机、计算机体系结构、数据结构、算法分析与设计、操作系统以及软件工程等各个方面。现在程序员大多数使用各种高级程序设计语言编写程序,而计算机只能识别用二进制数0、1表示的指令和数所构成的机器语言程序,用高级语言编写的程序不能直接在机器上运行,要想运行它并得到预期的结果,必须将源程序转换成等价的目标程序,这个转换过程就是所谓的编译。 在计算机发展的初期,使用机器语言编写程序。机器语言是由0、1表示的机器指令组成,不直观,难写、难读、难记,易出错,调试极不方便,由于不同类型的计算机使用不同的机器指令,程序员必须针对某种类型的机器编程,编写的程序不适于移植,因此限制了计算机的推广与使用。 为了便于记忆、阅读和检查,用较直观的符号来代替机器指令,进一步发展成为汇编语言。汇编语言采用比较直观具有含义的指令助记符表示每条机器指令,同时为方便编程,还提供了若干宏指令对应一组机器指令,从而完成一些特定的功能。但汇编指令依赖于机器,对问题的描述处于低层次,没有高级语言中的条件、循环等控制结构,编程人员必须考虑寄存器、内存的分配,使用仍不方便,程序设计的效率仍然很低。 接近自然语言的程序设计语言,如Basic、C、Pascal语言等等。这类语言完全摆脱了机器指令的约束,用它编写的程序接近自然语言和习惯上对算法的描述,故称为面向用户的语言。后来,又相继出现许多专门用于某个应用领域问题的专业语言,例如用于数据库操作的SQL语言,这类语言称为
文档评论(0)