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

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

  1. 1、本文档共76页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理 课时:授课课时48+实验课时8 课程性质:必修/考试 考试方式:闭卷考试 主讲:敬茂华 jing_jmh@ 先修课程:离散数学、组成原理、汇编语言、数据结构、C++或其他程序设计语言 第0章 预备知识 本门课程的目的和意义 程序设计语言与程序的翻译 程序设计语言的语法描述 为什么要学习编译原理? 例 int fact() { static int i=5; if(i=0){ return(i); } else{ i=i-1; return((i+abs(1))*fact()); /*第9行,函数abs( ):求绝对值.*/ } } main() { printf(“factor of 5=%d/n”,fact()); } 上程序的运行结果是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。 程序改动后结果变化,主要是和编译时代码生成策略有关。对于表达式(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。 编译原理课程关注的内容 面向机器的语言 计算机的硬件只能识别由0、1字符串组成的机器指令序列,即机器指令程序。特点:不易理解,编写程序既困难又容易出错。 用容易记忆的符号来代替0、1字符串。用符号表示的指令被称为汇编指令,汇编指令的集合被称为汇编语言,由汇编语言编写的指令序列被称为汇编语言程序。 面向人类的语言   通用程序设计语言,如C/C++,Java,C#;数据查询语言,如SQL;形式化描述语言,如EBNF、YACC。 其他面向特定应用领域的语言  面向互联网应用的HTML、XML;面向计算机辅助设计的MATLAB;面向集成电路设计的VHDL、Verilog;面向虚拟现实的VRML;…… 语言之间的翻译 高级语言之间的翻译,一般被称为转换,如FORTRAN到Ada的转换等,或者被称为预处理,如SQL到C/C++的预处理。 高级语言可以直接翻译成机器语言,也可以翻译成汇编语言,这两个翻译过程是将高级语言的源程序翻译成低级语言的目标程序,这种翻译被称为编译。 将一个汇编语言汇编为可在另一平台上运行的机器指令,则称为交叉汇编,而建立在交叉汇编基础之上的编译模式称为交叉编译。 把机器语言翻译成汇编语言,或者把汇编语言翻译成高级语言,分别称它们为反汇编和反编译。 上述语言之间的翻译虽然各不相同,但基本方法,特别是对源语言的分析方法是相同的。 编译原理与编译技术 编译原理与编译技术是两类不同的过程。 编译原理研究的就是语言翻译方法中所用到的基本原理,关注的是产生编译器的理论和原理。一般并不深入讨论某一具体的编译器的实现和工作机制。 编译技术更关注编写(实现)编译器过程中所用到的技术。 编译原理是学习编译技术以及深入掌握利用高级语言进行编程的基础。 通用程序设计语言的主要成份 通用程序设计语言的典型特征之一是抽象,其抽象程度是以程序设计语言所支持的基本结构为特征的。可以大致划分为三种形式:过程、模块(抽象数据类型,ADT)和类。 以过程为基本结构的程序设计语言的典型代表有C、Pascal等;以ADT为基本结构的程序设计语言的典型代表是Ada83;而以类为基本结构的程序设计语言包括当前流行的C++、Java和Ada95等。这三种形式经过了一个演变过程,每一次演变都使得程序设计语言的抽象程度得到一次提高,同时也为这些程序设计语言的编译器提出了新的要求。 类概念的引入,为利用程序设计语言构造类型提供了真正的支持,也是面向对象程序设计(OO

文档评论(0)

wuyoujun92 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档