- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
翻译程序编译程序目标程序-Read
课程简介 课程内容 学习的意义 课程要求 学习要求 学习目标 学习向导 参考资料 参考资料 第1章 引论 本章主要内容: 什么是编译程序 编译过程和编译程序的结构 为什么要学习编译程序 §1.1 什么叫编译程序 (1).翻译程序(Translator) (2). 汇编程序(Assembler) (3). 编译程序(Compiler) (4). 解释程序(Interpreter) §1.2 编译过程概述 第一阶段,词法分析 (Lexical analysis) 单词符号是语言的基本组成成分,是人们理解和编写程序的基本要素。识别和理解这些要素无疑也是翻译的基础。 如同将英文翻译成中文的情形一样,如果你对英语单词不理解,那就谈不上进行正确的翻译。 在词法分析阶段的工作中所依循的是语言的词法规则(或称构词规则)。描述词法规则的有效工具是正规式和有限自动机。 第二阶段,语法分析(Syntax Analysis) 第三阶段,语义分析与中间代码产生(Semantic Analysis and Intermediate Generator) 第四阶段,优化 (Optimization) 第五阶段,目标代码生成(Code Generation) §1.3 编译程序的结构 1.3.1 编译程序总框 1.3.2 表格管理 (symbol-table manager) 1.3.3 出错处理(error handler) 1.3.4 遍 (Pass) 1.3.5 编译前端与后端 §1.4 编译程序与程序设计环境 §1.5 编译程序的生成 习题: 什么是汇编程序? 什么是编译程序? 什么是解释程序? 什么是翻译程序? 编译的逻辑过程是什么? 编译程序由那些逻辑部分组成? 什么是编译遍? 什么是编译前端? 什么是编译后端? 编译方式与解释方式的根本区别是什么? 上述编译过程的五个阶段是编译程序工作时的动态特征。编译程序的结构可以按照这五阶段的任务分模块进行设计。图1.5给出了编译程序总框。 图1.5 编译程序总框 词法分析器 语法分析器 语义分析与中间代码生成器 中间代码优化器 目标代码生成器 表 格 管 理 出 错 处 理 目标代码程序 源程序 单词符号串 语法单位 中间代码串 中间代码串 词法分析器(lexical analyzer),又称扫描器,输入源程序,进行词法分析,输出单词符号。 语法分析器(syntax analyzer),简称分析器,对单词符号串进行语法分析(根据语法规则进行推导或归约),识别出各类语法单位,最终判断输入串是否构成语法上正确的“程序”。 语义分析与中间代码产生器(semantic analyzer and intermediate code generator),按照语义规则对语法分析器归约出(或推导出)的语法单位进行语义分析并把它们翻译成一定形式的中间代码。 有的编译程序在识别出各类语法单位后,构造并输出一棵表示语法结构的语法树,然后,根据语法树进行语义分析和中间代码产生。还有许多编译程序在识别出语法单位后并不真正构造语法树,而是调用相应的语义子程序。在这种编译程序中,扫描器、分析器和中间代码生成器三者并非是截然分开的,而是相互穿插的。 代码优化器(code optimizer),对中间代码进行优化处理。 代码生成器(code generator),把中间代码翻译成目标程序。 除了上述五个功能模块外,一个完整的编译程序还应包括“表格管理”和“出错处理”两部分。 编译程序在工作过程中需要保持一系列的表格,以登记源程序的各类信息和编译各阶段的进展状况。 合理地设计和使用表格是编译程序构造的一个重要问题。 在编译程序使用的表格中,最重要的是符号表。它用来登记源程序中出现的每个名字以及名字的各种属性。 例如,一个名字是常量名、变量名,还是过程名等等;如果是变量名,它的类型是什么、所占内存是多大、地址是什么等等。 通常,编译程序在处理到名字的定义性出现时,要把名字的各种属性填入到符号表中;当处理到名字的使用性出现时,要对名字的属性进行查证。 当扫描器识别出一个名字(标识符)后,它把该名字填入到符号表中。但这时不能完全确定名字的属性,它的各种属性要在后续的各阶段才能填入。 例如,名字的类型等要在语义分析时才能确定,而名字的地址可能要到目标代码生成才能确定。 由此可见,编译各阶段都涉及到构造、查找或更新有关的表格。 一个编译程序不仅应能对书写正
文档评论(0)