- 1、本文档共34页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3传名 传名是一种宏替换,直接在调用处产生一个子程序副本,并且 用实际参数名替代形式参数名. 设主程序调用如下: d:=distence(a1,b1,a2,b2); 相当于在此处产生一段程序: d:=sqrt((a2-a1)**2+(b2-b1)**2); 六 存储分配 程序运行时,必须分配相应的存储空间. 这些空间包括: 变量空间,常量空间,临时空间,连接单元 等.有的空间在编译时就能确定其大小,而有的空间必须在程序运行时才能确定.根据这一特性,把空间分配分为两种: 静态存储分配 动态存储分配 1 静态存储分配 若在编译时能完全确定程序所需空间大小,并能确定每个数据项的地址,就可在编译时分配所需空间,这种分配方法称为静态存储分配. 若一个语言无递归调用,无可变数据项,则可静态地确定各数据项的空间大小和地址. Fortran语言满足这种定义. 2 动态存储分配 是指在程序运行时才能确定存储空间和地址的一种分配方法.适用于允许递归和可变数据项的语言,如pascal 和 c 语言. 一般采用堆栈动态地分配空间, 当调用子程序时,就在堆栈中为该子程序分配所需空间;而子程序运行结束后,就释放该子程序空间. 子程序空间 编译时可确定(活动记录) 运行时可确定(可变空间) 活动记录 连接数据 形式参数 局部变量 数组内情向量表 临时变量等 活动记录 可变空间 堆栈 子 程 序 S * 第一章 引论 一 什么是编译程序? 计算机经过几十年的发展, 在程序设计语言方面,已经从低级语言发展到高级语言;然而,计算机内部的本质只能识别 0 , 1 代码序列(机器语言),而对高级语言甚至符号语言仍然一窍不通。 因此用高级语言编写的程序,必须先翻译为机器语言,才能被计算机理解执行。 第一个完成这种翻译任务的编译程序为FORTRAN编译程序,是上世纪五十年代,由1977年的图灵奖得主约翰 · 巴克斯(John Warner Backus)设计的,同时巴克斯也是最广泛流行的元语言BNF范式的发明人。 第一节、编译程序概述 关于FORTRAN的一个小故事: 关于FORTRAN的发明,其中还有一个小插曲,当时冯诺伊曼正在担任IBM公司顾问,每周一次“升堂”审查公司的各种新科研计划。他当时看到了FORTRAN的想法,丝毫没有兴奋之感,反而这样问Backus:“为什么除了机器语言之外,你还想弄点别的呢?”。有趣的是,冯诺伊曼此后还一直坚持这种观点,他在普林斯顿的学生Donald Gillies回忆说,为了不像大家那样手工将程序汇编为二进制代码,他曾经开发了一个汇编程序,冯诺伊曼发现后非常生气,说:“这是在浪费宝贵的科学计算设备来干琐碎的杂事!” 定义:设源语言为L1,目标语言为L2, 翻译程序是一个程序,它能将L1转换为逻辑上等价的L2。 若 L1 为高级语言,L2 为低级语言或机器语言,称这种 翻译程序为编译程序。 若 L1 为低级语言,L2 为机器语言,称这种翻译程序为 汇编程序。 解释程序是指逐条翻译 L1的语句,并立即执行翻译出的 目标代码序列。 编译原理 就是介绍编译程序的一般规律及设计方法的一门课程。 高级语言程序 机器语言程序 翻译为 二 编译过程概述 编译程序从接受源程序到输出目标代码的整个过程,可逻辑的分为 5 个阶段: 词 法 分 析 语 法 分 析 中间代码生成 代 码 优 化 目标代码生成 1) 词法分析:把源程序作为字符串进行扫描 ,根据单词词法,识别出所有单词,过滤无用符,并检查是否为合法的单词。 单词一般分为如下几种: 基本字,标识符,常数,算符,界符 例如: if n=1 then f:=1 else f:=n*f(n); 该程序经过语法分析,得到如下单词序列: if n = 1 then f := 1 else f := n * f ( n ) ; 过滤掉回车换行,空格,注释等 2) 语法分析: 根据语言的语法规则,从单词符号串中识别出各种语法单位 ,进行句子分析,并检查整个输入字串是否为合法的程序; 重要的语法单位有:
文档评论(0)