东北大学秦皇岛分校编译原理课件第一章

东北大学秦皇岛分校编译原理课件第一章

ID:40407755

大小:409.56 KB

页数:76页

时间:2019-08-01

东北大学秦皇岛分校编译原理课件第一章_第1页
东北大学秦皇岛分校编译原理课件第一章_第2页
东北大学秦皇岛分校编译原理课件第一章_第3页
东北大学秦皇岛分校编译原理课件第一章_第4页
东北大学秦皇岛分校编译原理课件第一章_第5页
资源描述:

《东北大学秦皇岛分校编译原理课件第一章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、编译原理课时:授课课时48+实验课时8课程性质:必修/考试考试方式:闭卷考试主讲:敬茂华jing_jmh@tom.com先修课程:离散数学、组成原理、汇编语言、数据结构、C++或其他程序设计语言第0章预备知识本门课程的目的和意义程序设计语言与程序的翻译程序设计语言的语法描述为什么要学习编译原理?例intfact(){staticinti=5;if(i=0){return(i);}else{i=i-1;return((i+abs(1))*fact());/*第9行,函数abs():求绝对值.*/}}main(){printf(“factorof5=%d/n”,fact());}上程序的运行结果

2、是120。但是,如果把第9行的abs(1)改成1的话,该程序结果是1。分析i是静态变量,所有地方对i的操作都是对同一地址空间的操作,所以每次递归进入fact函数后,上一层对i的赋值仍然有效。由于C语言的编译机制,每次调用时,(i+abs(1))*fact()中(i+abs(1))的值都先于fact算出。所以,第1次递归时,所求值为5*fact,第2次递归时,所求值为4*fact,第3次递归时,所求值为3*fact,第4次递归时,所求值为2*fact,第5次递归时,所求值为1*fact,而此时fact为1。这样,程序相当于是求一个阶乘函数5*4*3*2*1,所以,结果为120。程序改动后结果变

3、化,主要是和编译时代码生成策略有关。对于表达式(i+abs(1))*fact(),因两个子表达式都有函数调用,因此,编译器先产生左子表达式代码,后产生右子表达式代码。当abs(1)改为1后,左子表达式就没有函数调用了,于是,编译器会先产生右子表达式代码,这样一来,每次递归调用时,(i+1)*fact()中(i+1)的值后于fact算出。第1次递归时,所求值为(i+1)*fact(),第2次递归时,所求值为(i+1)*fact(),……,第5次递归时,所求值为(i+1)*fact(),而此时fact为1,i为0,即实际上每次递归调用所求的实际都是1*fact,最后结果还是1。编译原理课程关注的

4、内容面向机器的语言计算机的硬件只能识别由0、1字符串组成的机器指令序列,即机器指令程序。特点:不易理解,编写程序既困难又容易出错。用容易记忆的符号来代替0、1字符串。用符号表示的指令被称为汇编指令,汇编指令的集合被称为汇编语言,由汇编语言编写的指令序列被称为汇编语言程序。面向人类的语言通用程序设计语言,如C/C++,Java,C#;数据查询语言,如SQL;形式化描述语言,如EBNF、YACC。其他面向特定应用领域的语言面向互联网应用的HTML、XML;面向计算机辅助设计的MATLAB;面向集成电路设计的VHDL、Verilog;面向虚拟现实的VRML;……语言之间的翻译高级语言之间的翻译,一

5、般被称为转换,如FORTRAN到Ada的转换等,或者被称为预处理,如SQL到C/C++的预处理。高级语言可以直接翻译成机器语言,也可以翻译成汇编语言,这两个翻译过程是将高级语言的源程序翻译成低级语言的目标程序,这种翻译被称为编译。将一个汇编语言汇编为可在另一平台上运行的机器指令,则称为交叉汇编,而建立在交叉汇编基础之上的编译模式称为交叉编译。把机器语言翻译成汇编语言,或者把汇编语言翻译成高级语言,分别称它们为反汇编和反编译。上述语言之间的翻译虽然各不相同,但基本方法,特别是对源语言的分析方法是相同的。编译原理与编译技术编译原理与编译技术是两类不同的过程。编译原理研究的就是语言翻译方法中所用到

6、的基本原理,关注的是产生编译器的理论和原理。一般并不深入讨论某一具体的编译器的实现和工作机制。编译技术更关注编写(实现)编译器过程中所用到的技术。编译原理是学习编译技术以及深入掌握利用高级语言进行编程的基础。通用程序设计语言的主要成份通用程序设计语言的典型特征之一是抽象,其抽象程度是以程序设计语言所支持的基本结构为特征的。可以大致划分为三种形式:过程、模块(抽象数据类型,ADT)和类。以过程为基本结构的程序设计语言的典型代表有C、Pascal等;以ADT为基本结构的程序设计语言的典型代表是Ada83;而以类为基本结构的程序设计语言包括当前流行的C++、Java和Ada95等。这三种形式经过了

7、一个演变过程,每一次演变都使得程序设计语言的抽象程度得到一次提高,同时也为这些程序设计语言的编译器提出了新的要求。类概念的引入,为利用程序设计语言构造类型提供了真正的支持,也是面向对象程序设计(OOP)语言的重要特征之一。程序设计语言提供的机制与程序设计的风格有着密切关系,以过程为基本抽象的程序设计语言支持的是过程式的程序设计范型(paradigm),以类为基本抽象的程序设计语言支持的是面向对象的程序设计范型

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。