大学程序设计语言下载课件chap3章节(509KB).pptVIP

  • 1
  • 0
  • 约8.97千字
  • 约 59页
  • 2018-04-10 发布于广东
  • 举报

大学程序设计语言下载课件chap3章节(509KB).ppt

program mainPro (input, output) …… procedure pro begin …… end function fun(x: integer): integer; begin …… end begin (*main begin) …… end 独立接口定义: 将若干个子程序相关的接口进行单独定义。 其好处是:1)编译器可方便的检测出相同数据在不同子程序中不同定义的错误;2)调试时只需重新编译修改过的模块,提高编译效率。 如C语言中,“.h”文件形成了形式说明部分,以解决两个独立编译组件之间传输信息的问题,而“.c”文件形成了实现部分。 从可执行语句中独立出来的数据描述 讲数据与程序进行分离; 好处是使得数据格式与程序分区中的运算逻辑独立。只修改数据分区就可以完成数据结构的细微变动而不需同时修改程序。 非独立子程序定义 主程序与子程序之间没有任何语法的区别。即程序组织结构无组织性。 一个函数调用即开始了一个新的子程序,Return 的执行则结束一个子程序。 程序的行为完全是动态的。 SNOBOL4是典型的实例。 返回本章 3.2 翻译的步骤 高级语言源程序必须经过翻译才能在虚拟计算机上运行。 翻译一般是一个较为复杂的过程。通常经过“词法分析”—“语法分析” —“语义分析” —“代码优化” —“目标程序生成”等5个阶段。可归纳为源程序的分析和目标代码的生成。 翻译通常追求高效的编译速度或高效的可执行的优化代码。 “一遍”翻译?“二遍”翻译? “三遍”翻译? 由于编译技术的发展,编译速度与扫描次数之间的关系不明显了,而语言的复杂度显得突出 源程序的分析 具体过程包括: 词法分析 语法分析 语义分析 词法分析 将源程序中的字符串划分成基本要素单元:标识符、限定词、运算符、数字、关键字、噪声码、空格、注释等。划分的结果称为语法项。 该分析过程由词法分析器完成。 虽然词法分析的概念简单,但过程复杂,耗费的编译时间较长。必须对源程序进行逐字的阅读和分析。 词法分析实例: 如下列Fortran 语言中的语句如何分析? DO 10 K=1,10 !循环语句 DO 10 K=1.10 !赋值语句 解决方法:假读:超前搜索(超前扫描) 超出边界怎么办? 返回本节 语法分析 语法分析是翻译过程的核心部分。语法分析的任务是:按照语法,从源程序数据项中识别出各类语法成分,同时进行语法检查,为语义分析和代码生成做准备。 执行语法分析任务的程序是语法分析程序,也称之为语法分析器。 一般采用的方法有自顶向下分析方法:递归子程序法和LL(1)分析法;自低向上的分析方法:和LR分析法。 高效的语法分析是基于形式语法的技术。 返回本节 语义分析 语义分析的任务是:处理语法分析而识别出来的语法结构,生成中间代码。语义分析任务由语义分析器完成。 许多其它的辅助功能也在该过程进行,如符号表的维护、隐含信息的插入、错误检测、宏的扩展等。 目标程序的生成 语义分析器的输出结构是中间代码。中间代码一般是一种内部表达方式。代码生成器将根据这些中间代码生成目标代码。但在代码生成之前,可对中间代码进行一些优化处理。如果,子程序是单独翻译的或者需要使用子程序库,则还需进行连接和装入。 因此,目标代码的生成阶段通常包含的处理过程有: 优化 代码的生成 连接和装入 优化 考虑语句: A = B + C + D; 可能生成的中间代码是: a) tmp1 = B + C; b) tmp2 = tmp1 + D; c) A = tmp2; 可见3、4、6、7指令是多余的 。优化后可以获得较高的执行效率。 直接生成的执行代码是: 1)B传入寄存器 2) 寄存器加C 3) 寄存器的值存tmp1中 4)tmp1传入寄存器 5) 寄存器加D 6) 寄存器的值存tmp2中 7) tmp2传入寄存器 8) 寄存器的值存A中 代码的生成 经过语义分析产生的中间代码经过优化后,必须转化成汇编语言、机器语言或其他可作为编译输出的目标程序。该处理包括根据内部程序表达式所提供的信息对输出进行适当的格式化。 连接与装入 如果,子程序

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档