编译原理高级语言解释系统(希赛教育基础学院)

上传人:206****923 文档编号:41314452 上传时间:2018-05-29 格式:DOC 页数:3 大小:30KB
返回 下载 相关 举报
编译原理高级语言解释系统(希赛教育基础学院)_第1页
第1页 / 共3页
编译原理高级语言解释系统(希赛教育基础学院)_第2页
第2页 / 共3页
编译原理高级语言解释系统(希赛教育基础学院)_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《编译原理高级语言解释系统(希赛教育基础学院)》由会员分享,可在线阅读,更多相关《编译原理高级语言解释系统(希赛教育基础学院)(3页珍藏版)》请在金锄头文库上搜索。

1、1.3 高级语言解释系统高级语言解释系统为了实现在一个计算机上运行高级语言的程序,主要有两个途径:第一个途径是把该程序翻译为这个计算机的指令代码序列,这就是我们已经描述的编译过程。第二个途径是编写一个程序,它解释所遇到的高级语言程序中的语句并且完成这些语句的动作,这样的程序就叫解释程序。从功能上说,一个解释程序能让计算机执行高级语言。它与编译程序的主要不同是它不生成目标代码,它每遇到一个语句,就要对这个语句进行分析以决定语句的含义,执行相应的动作。下面的图示意了它的工作机理。解释程序直接对源程序中的语句进行分析,执行其隐含的操作。如执行下面的程序:解释程序直接输出结果 4。而编译程序则生成目标

2、代码,诸如:movf #2, bmovf b , R1addf #2, R1movf R1, a 编译系统生成的目标代码由计算机执行才能生成结果。使用编译系统时会区分编译阶段和运行阶段,编译阶段对源程序进行编译,运行阶段是指目标程序的运行。而解释系统则是边解释边执行。从存储组织来看,在编译阶段,存储区一般要有源程序缓冲区,目标代码缓冲区,名字表以及编译程序使用的源程序中间表示和各种表格等等。在运行阶段,存储区只有目标代码和数据区了。对解释系统来说,在它工作的自始至终,存储区中要有源程序,名字表,标号表等表格,输入输出缓冲区以及数据区等等.1.4 编译技术的发展和应用编译技术的发展和应用据说第一

3、个编译程序的出现是在 20 世纪 50 年代早期,很难讲出确切的时间,因为当初大量的实验和实现工作是由不同的小组独立完成的,多数早期的编译工作是将算术公式翻译成机器代码。用现在的标准来衡量,当时的编译程序能完成的工作十分初步,如只允许简单的单目运算,数据元素的命名方式有很多限制。然而它们奠定了对高级语言编译系统的研究和开发的基础。20 世纪 50 年代中期出现了 FORTRAN等一批高级语言,相应的一批编译系统开发成功。随着编译技术的发展和社会对编译程序需求的不断增长,20 世纪 50 年代末有人开始研究编译程序的自动生成工具,提出并研制编译程序的编译程序。它的功能是以任一语言的词法规则、语法

4、规则和语义解释出发,自动产生该语言的编译程序。目前很多自动生成工具已广泛使用,如词法分析程序的生成系统 LEX,语法分析程序的生成系统 YACC 等。20 世纪 60 年代起,不断有人使用自展技术来构造编译程序。自展的主要特征是用被编译的语言来书写该语言自身的编译程序。1971 年,PASCAL 的编译程序用自展技术生成后,其影响就越来越大。随着并行技术和并行语言的发展,处理并行语言的并行编译技术,将串行程序转换成并行程序的自动并行编译技术也正在深入研究之中。 另外嵌入式应用迅速增长的需求,推动了交叉编译技术的发展.还有系统芯片设计方法和关键 EDA 技术的研究,也带动了专用语言 VHDL 等

5、及其编译技术的不断深化。编译实现方式的发展编译实现方式的发展手工机器语言汇编系统程序设计语言自动构造工具 lex yacc gcc推动编译技术发展的因素推动编译技术发展的因素语言范型(计算模式)计算机体系结构语言范型语言范型命令式(imperative language)应用式(applicative)基于规则的(rule-based)面向对象的(object-oriented)并行计算(parallel computing)体系结构体系结构 万诺曼机体系结构并行体系结构嵌入系统 编译程序执行环境编译程序执行环境批处理交互环境嵌入系统环境为了提高软件开发的效率和保证质量,人们除了要在软件工程中

6、对软件开发过程所要遵循的规范化或标准化外,还尽量使用先进的软件开发技术和相应的软件工具,而大部分软件工具的开发,常常要用到编译技术和方法。实际上编译程序本身也是一种软件开发工具。为了提高编程效率,缩短调试时间,软件工作人员研制了不少对源程序处理的工具。这些工具的开发不同程度地用到编译技术和方法。下面仅是一些例子。1、语言的结构化编辑器语言的结构化编辑器 结构化编辑器是引导用户在语言的语法制导下编制程序,能自动地提供关键字和与其匹配的关键字,如 if 后必须有 then,begin 和 end 的配对,左右括号的配对等,这样可以减少语法上的错误,可加快对源程序的调试,提高效率和质量。2、语言程序

7、的调试工具语言程序的调试工具 调试是软件开发过程中一个重要环节,结构化编辑器只能解决语法错误的问题,而对一个已通过编译的程序来说,需进一步了解的是程序执行的结果与编程人员的意图是否一致,程序的执行是否实现预计的算法和功能。这种对算法的错误或程序没能反应算法的功能等错误就需用调试器来协助解决。调试器的功能愈强,实现愈复杂,但它必须与语法分析、语义处理有紧密联系。 3、语言程序测试工具语言程序测试工具 语言程序的测试工具有两种:静态分析器和动态测试器静态分析器和动态测试器静态分析器是对源程序进行静态地分析。它对源程序进行语法分析并制定相应表格,检查变量定值与引用的关系。如某变量未被赋值就被引用,或

8、定值后未被引用,或多余的源代码等一些编译程序的语法分析发现不了的错误。动态测试工具是在源程序的适当位置插入某些信息,并用测试用例记录(显示语句或函数)程序运行时的实际路径。将运行结果与期望的结果进行比较分析,帮助编程人员查找问题。这种测试工具在国内已有开发,如 FORTRAN 语言和 C 语言的测试工具。4、高级语言之间的转换工具高级语言之间的转换工具 由于计算机硬件的不断更新换代,更新更好的程序设计语言的推出为提高计算机的使用效率提供了良好条件,然而一些已有的非常成熟的软件如何在新机器新语言情况下使用呢?为了减少重新编制程序所耗费的人力和时间,就要解决如何把一种高级语言转换成另一种高级语言,

9、乃至汇编语言转换成高级语言的问题。这种转换工作要对被转换的语言进行词法和语法分析,只不过生成的目标语言是另一种高级语言而已。这与实现一个完整的编译程序相比工作量要少些。在国内已研制出C,PASCAL,FORTRAN 到 Ada 的翻译器和 IBM 4700 汇编到 C 的转换器,其效果很好。近年来,由于JAVA 语言的发展,国内外也已研制出不少其他语言到 JAVA 的转换系统,如 c 到 JAVA 的转换系统,cobol到 JAVA 的转换系统等等。【本章小结】1.从功能上说编译程序是一个翻译程序,将高级语言的程序翻译成低级语言的程序。2.以源程序在编译过程中的不同表示形式初步理解编译各阶段的工作。3.不会有很多人会从事设计和编写编译程序的工作的,但编译技术会应用在很多领域。4.有关术语:源语言,源程序,目标语言,目标程序,语言转换系统,编译程序的 T 型图表示。【思考题】 为什么需要编译程序? 用源程序片段 if (a=b+1) b = a * a ; 为例,考虑编译过程中它可能的不同表示形式来理解编译各阶段的工作。 比较你所使用过的一些语言的编译程序:他们的编译速度,出错信息的可读性,有无优化选择等等。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号