- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌套的子程序定义 如PASCAL,子程序定义在主程序中作为声明出现,子程序本身又可含有其他子程序定义。 其目标是强调结构化的语句,但事实上产生了不同用途。 结构化语句的引入主要是为算法结构的常见的层次划分提供一种自然的注记方式,但嵌套子程序定义为编译时定义的子程序提供了非局部的作用环境。从而允许静态类型检查,和有效的可执行代码的生成。 嵌套的另一好处是作用域管理。允许子程序名具有较少的作用域。 精品 分开的接口定义 FORTRAN的结构使得编译分开子程序变得非常容易,但缺点是不同子程序共享的数据可能有不同的定义,而这种不同是编译器在编译时无法检测到的。 PASCAL允许编译器访问所有这样的定义以帮助发现错误,缺点是全部程序,即使其有上千条语句,必须在每次修改后重新编译。 结合上面的技术可以改善编译行为。 程序实现由几个相互交互的子程序构成,这些部件称为模块,将被连接在一起以创建可执行程序,但每次只有修改的模块被重编译。而在一个部件中的过程间传送的数据必须具有公共声明,从而允许编译器的高效检查。 为了在分开的编译模块间传递数据,引入了规约部件,如C中.h文件。Ada中的Package(接口定义规约+实现体)。 精品 数据描述和可执行语句分离 COBOL包含了早期的部件结构形式。在COBOL中,所有子程序的数据声明和可执行语句被分入不同的程序中,即数据段和过程段,而用环境段包含关于外部操作环境的声明。 一个程序的过程段被组织为子单元,以对应子程序体,但所有数据对所有子程序均是全局的,没有东西对应于通常子程序中的局部数据。 中心化数据段的优点是:强迫形成数据格式和过程段中算法的逻辑独立性,数据结构的细小修改可只修改数据段而不需修改过程段。同时将数据描述搜集到一个地方,而不是散布在子程序中也是方便的方式。 这适合于大量数据的处理。在某种意义是,数据库应用是这种形式的扩展。 精品 未分离的子程序定义 不分开主程序和子程序语句,如SNOBOL4中,程序是一个语句表。 子程序间没有语法分隔,函数调用开始新的子程序执行,返回语句结束该子程序。 程序的行为是动态的。事实上,任意语句可以同时是主程序的一部分,也可以是子程序的一部分。这体现在该语句可在主程序的执行中某点被执行,而后又在某子程序的执行中某点被执行。这种混沌结构仅仅对允许运行时翻译和相对简单的新语句和子程序执行机制具有价值。 返回 精品 3.2 翻译的阶段 逻辑上,翻译可分为两个主要部分(输入源程序的分析,可执行目标程序的综合),两个阶段又可细分。 大多数翻译器的中这些逻辑阶段不是可以明确划分开的,而是混合在一起使得分析和综合交替进行(通常逐条语句进行)。 精品 翻译的阶段 编译器通常对源程序扫描两遍 第一遍将程序分解为部件并从程序中导出信息。 第二遍根据这些收集的信息生成目标程序。 如果编译速度是重要的考虑(如教学用编译器),一遍扫描是常用方式,在程序被分析时,立即被翻译为目标代码。 如果执行速度是重要考虑,三遍甚至更多遍扫描也是可能的。 第一遍分析源程序。 第二遍使用各种定义好的优化算法将源程序重写为更多效的形式。 第三遍生成目标代码。 精品 返回 翻译的阶段 精品 源程序的分析(1/3) 词法分析 将源程序字符流分隔、分组,成为一些基本的构成成分,如: 标识符、分界符、操作符、数、关键字、噪音字、空白、注释等。 这些称为词法项,Token(语言符号)。 精品 源程序的分析(2/3) 语法分析(parsing) 标识大的程序结构(语句,声明、表达式等)(基于前面得到的语言符号)。 通常语法分析和语义分析交替进行(使用栈作为通讯工具)。 语法分析器向栈中输入各种语法单元元素,语义分析器检索并处理。 需要高效的语法分析技术,主要基于形式化文法的应用。 精品 源程序的分析(3/3) 语义分析——翻译的中心阶段 处理语法分析器识别的语法结构,并开始形成可执行目标码的结构,语义分析是分析和综合间的桥梁。 这阶段的工作包括一些重要工作,如符号表维护、大多数错误检测,宏扩展以及编译时语句的执行。 在简单情况下,语义分析器直接生成可执行代码,但大多数情况下,是产生最终可执行程序的某种内部格式,然后被优化处理。 语义分析器可分为一些小的语义分析器,各自处理一特殊类型的程序结构。它们之间通过存放在各种数据结构、特别是中心符号表中的信息而进行交互。 精品 常见的语义分析功能(1/4) 1、符号表维护 符号表(最早由词法分析形成)含有对程序中不同标识符的表项(不仅含标识符,还包含涉及标识符属性的附加数据,如:标识符类型,值类型,引用环境等。) 语义分析器在处理声明、子程序头、语句等时,填入相关信息。 编译型语言的符号表在翻译结构后通常丢弃。 但有的语言在执行时仍保留,如:允许运行时创建新标识符的语言(
原创力文档


文档评论(0)