平阴县建设局网站,wordpress word,北京微网站建设设计服务,网站推广联盟文章目录 1.什么是编译程序2.编译过程和编译程序的结构2.1.编译过程概述2.2.编译程序的结构2.3.编译阶段的组合 3.解释程序和一些软件工具3.1.解释程序3.2.处理源程序的软件工具 4.PL/0语言编译系统 学习总结#xff1a;这一部分是编译原理的绪论部分内容#xff0c;对编译程… 文章目录 1.什么是编译程序2.编译过程和编译程序的结构2.1.编译过程概述2.2.编译程序的结构2.3.编译阶段的组合 3.解释程序和一些软件工具3.1.解释程序3.2.处理源程序的软件工具 4.PL/0语言编译系统 学习总结这一部分是编译原理的绪论部分内容对编译程序的整体框架流程进行了介绍。内容均为概念没有能够出大题的内容个人认为考试前只需要对这些概念有一个基本的了解即可而非将本章作为复习重点。 1.什么是编译程序
编译程序的地位
编译程序是现代计算机系统的基本组成部分之一多数计算机都配有不止一种高级语言编译程序对有些高级语言甚至配置了几个不同性能的编译程序。
编译程序的功能从功能上看一个编译程序就是一个语言翻译程序把一种语言源语言书写的程序翻译成另一种语言目标语言的等价程序。但是其中的源语言是高级语言目标语言是低级语言。
编译程序的重要性编译程序使得多数计算机用户不必考虑与机器有关的繁琐细节使得程序员独立于机器。
程序设计语言处理程序的典型流程编译程序是程序设计语言处理程序的一部分。 预处理程序一个源程序可能分成几个模块存放在不同的文件里由预处理程序来将这些源程序汇集在一起。有些预处理程序也负责宏展开如C语言的预处理程序。过程概述编译程序生成的目标程序是汇编代码的形式需要经过汇编程序翻译成可再装配或可重定位的机器代码再经由装配/连接编辑程序与某些库程序连接成可以在机器上运行的代码。
2.编译过程和编译程序的结构
2.1.编译过程概述
编译过程的典型划分方法 词法分析 词法分析是编译过程的第一个阶段词法分析阶段的任务是从左到右一个字符一个字符地读入源程序对构成源程序的字符流进行扫描和分解从而识别出一个个单词例如标识符和保留字等。 语法分析 语法分析是编译过程的第二个阶段语法分析阶段的任务是在词法分析的基础上将单词序列分解为各种语法短语例如程序、语句和表达式等。通过语法分析确定整个输入串是否构成语法上正确的程序。可以将语法分析的结果表示为语法树的形式。 语义分析 语义分析是审查源程序有无语义错误为代码生成阶段收集类型信息。语义分析的具体任务包括类型审查、下标检查和运算对象的类型转换等。 中间代码生成 在进行完语法分析和语义分析后有的编译程序将源程序变为一种内部表示形式这种内部表示形式被称为中间语言或中间代码。中间代码是一种结构简单、含义明确的记号系统需要满足两点设计原则一是容易生成二是容易将它翻译成目标代码。很多编译程序采用一种类似于三地址指令的“四元式”中间代码可以表示为运算符,运算对象1,运算对象2,结果。 代码优化代码优化阶段的任务是对前一个阶段产生的中间代码进行变换或改造目的是使得生成的目标代码更加高效也就是更加节约时间和空间。 目标代码生成 目标代码生成阶段的任务是把中间代码变换为特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。这是编译的最后阶段它的工作和硬件结构和指令含义等都有关是一个非常复杂的过程。 备注并非所有的编译程序都划分为这样几个阶段有些编译程序并不需要生成中间代码有些编译程序不进行优化。不过大多数编译程序都包含上述几个工作阶段。 2.2.编译程序的结构
编译程序的组成
编译过程的六个阶段可以分别由词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序和目标代码生成程序六个模块完成。此外一个完整的编译程序还必须包括表格管理程序和出错处理程序。表格管理程序编译过程中源程序的各种信息被保留在不同的表格中编译各阶段的工作都涉及构造、查找和更新有关的表格因此需要有表格管理的工作。出错处理程序如果在编译过程中发现源程序有错误编译程序应该报告错误的性质和错误发生的地点并且将错误所造成的影响限制在尽可能小的范围内使得源程序的其余部分能够继续被编译下去有些编译器还能自动校正错误这些工作由出错处理程序完成。
2.3.编译阶段的组合
编译过程前端和后端的划分有时候把编译过程分为前端和后端。
编译前端前端的工作主要依赖于源语言而与目标语言无关。一般包括词法分析、语法分析、语义分析和中间代码生成这些阶段以及某些优化工作。编译后端后端是指那些依赖于目标机而一般不依赖于源语言只与中间代码有关的那些阶段的工作包括目标代码生成以及相关出错处理和符号表操作。前端和后端的组合某一个编译程序的前端加上相应的后端可以为不同的机器构成同一个源语言的编译程序不同语言编译的前端生成同一种中间语言再使用一个共同的后端则可以为同一个机器生成几个语言的编译程序。
编译过程的遍数
一个编译过程可以由一遍、两遍或多遍完成。遍是指对源程序或其等价的中间语言程序从头到尾扫描并完成规定任务的过程每一遍扫描可以完成上述一个阶段或多个阶段的工作。一个多遍的编译程序可以比一遍的编译程序少占内存整个编译程序的逻辑结构也更加清晰但是多遍也意味着增加读写中间文件的次数消耗更多的时间。
3.解释程序和一些软件工具
3.1.解释程序
编译程序的问题如果不把整个程序全部翻译完成之后这个程序不能开始运行也不会产生任何结果。
解释程序概述解释程序接受某个语言的程序并立即运行这个程序。它的工作模式就是一个个的获取、分析并执行源程序语句一旦一条语句分析阶数源程序便开始运行并生成结果。解释程序允许执行时修改程序。
编译程序和解释程序的存储组织比较
编译程序的存储组织在源程序被编译的阶段存储区中要为源文件和目标代码开辟空间要存放编译用的各种表格。在目标代码运行阶段存储区中主要是目标代码和数据编译所用的信息就都不再需要了。解释程序的存储组织解释程序一般对源程序的每一个语句逐一进行语法分析转换为一种内部表示形式存放在源程序区。由于解释程序允许在执行用户程序时修改程序这就要求在解释程序工作的整个过程中源程序、符号表等内容始终存放在存储区中并且要求存放格式要设计易于使用和修改。
解释程序的缺点程序的解释是非常慢的并且解释程序需要更大的空间开销。
3.2.处理源程序的软件工具
语言的结构化编辑器用户可以使用这种编辑器在语言的语法制导下编制出所需的源程序。这一类编辑器不仅具有通常的编辑和修改功能还会对源程序正文进行逐行分析并完成输入检查、自动提供关键字等任务。语言程序的调试工具该类工具允许用户一行一行来跟踪程序查看变量和数据结构的变化。调试的功能越强实现越复杂涉及到源程序的语法分析和语义处理技术。程序格式化工具程序格式化工具分析源程序并可以将程序以结构清晰可读的形式打印出来。语言程序测试工具可以分为静态分析器和动态测试器两种。 静态分析器在不运行程序的情况下对源程序进行静态分析以发现程序中潜在的错误或异常动态测试器在源程序分析的基础上将用于记录和现实程序执行轨迹的语句或函数插入到源程序的适当位置并用测试用例来记录和显示程序运行时的路径将运行结果与期望的结果进行比较分析帮助编程人员找到问题。 程序理解工具对程序进行分析确定模块间的调用关系记录程序数据的静态属性和结构属性并画出控制流程图帮助用户理解程序。高级语言之间的转换工具把一种高级语言转换为另一种高级语言的工具。这与实现一个完整的编译程序相比工作量小一些。
4.PL/0语言编译系统
PL/0语言编译系统概述
产生背景和基本组成PL/0语言编译系统是世界著名计算机科学家N.Wirth编写的由编译程序和解释程序两部分构成。PL/0编译程序源语言为PL/0目标语言是一个类P-code的代码。
PL/0语言编译系统组成PL/0语言编译程序由编译程序和解释程序两部分组成分别称为PL/0编译程序和类P-code解释程序。当编译程序正常阶数时PL/0语言编译系统会自动调用解释程序解释执行生成的目标程序。
PL/0编译程序的书写可以用C、Pascal或Java等语言书写。
PL/0语言概述PL/0语言的程序结构很简单是Pascal的一个子集。
程序语言的语法描述程序语言的语法描述常常采用一种被称为扩展巴克斯范式EBNF的形式。