
编译原理
文章平均质量分 55
Web客栈
这个作者很懒,什么都没留下…
展开
-
第三章 词法分析及词法分析程序(1)
编译程序的整个工作过程,是从接收字符串形式的源程序文件作为输入,并对此输入串进行词法分析开始的。词法分析的任务就在于依次扫视输入串中的各个字符,并从其中识别出一系列具有独立意义的基本语法单位—单词(token,也称为记号)。对程序语言来说,关键字(如i f,for,while,begin,end等)、标识符、各种常数、各种运算符(如+、* 、>、> = 、> >、+ = 、A等)及原创 2014-06-16 21:59:09 · 919 阅读 · 0 评论 -
第一章 编译原理绪论(3)——编译程序的逻辑结构
图1编译程序的逻辑结构原创 2014-05-07 20:55:15 · 4199 阅读 · 0 评论 -
第一章 编译原理绪论(1)——编译原理基本概念
计算机硬件只懂自己的指令系统,即只能直接执行相应机器语言格式的代码程序,而不能直接执行用高级语言或汇编语言编写的程序。因此,要在计算机上实现除机器语言之外的任一程序设计语言,就首先应使此种语言为计算机所“理解”。解决这一问题的方法有两种:一种是对程序进行翻译;另一种是对程序进行解释。(1)、翻译程序所谓翻译,是指在计算机中放置一个能由计算机直接执行的翻译程序,它以某一种程序设计语言(源语言原创 2014-05-07 20:41:11 · 574 阅读 · 0 评论 -
第一章 编译原理绪论(4)——编译程序的组织
图1所示的编译程序的逻辑结构,是指它们之间的逻辑关系,而不一定是执行时间上的先后顺序。事实上,可按不同的执行流程来组织上述各部分的工作,这在很大程度上依赖于编译过程中对源程序扫描的遍数,以及如何划分各遍扫描所进行的工作。此处所说的“遍”,是指对源程序或其内部表示从头到尾扫视一次,并进行有关的加工处理工作。从对源程序的词法分析开始到中间代码生成,编译程序所完成的处理工作只依赖于源语言,而与运行目原创 2014-05-07 21:00:13 · 455 阅读 · 0 评论 -
第一章 编译原理绪论(2)——编译程序的八个部分
编译程序的主要功能是把用高级语言编写的源程序翻译为等价的目标程序。就一个典型的编译程序而论,一般都含有下面八个部分:( 1 )、词法分析程序(也称为扫描器)( 2 )、语法分析程序(有时简称为分析器)( 3 )、语义分析程序( 4 )、中间代码生成程序( 5 )、代码优化程序( 6 )、目标代码生成程序( 7 )、错误检查和处理程序( 8 )、各种信息表格的管理程序原创 2014-05-07 20:45:01 · 2740 阅读 · 0 评论 -
第七章 运行时的存储组织和分配(2)——存储组织
1、存储组织1.1、运行时内存的划分在运行时,系统将为目标程序分配一块存储空间,这个存储空间按用途可以划分为下面几个部分:( 1 )、目标程序区,用来存放所生成的目标程序;( 2 )、静态数据区,用来存放编译程序本身就可以确定所占用存储空间大小的数据;( 3 )、运行栈区,在运行时才能分配存储空间的数据就分配在运行栈;( 4 )、供用户动态申请存储空间的堆区。这几个部分原创 2014-06-16 22:57:15 · 732 阅读 · 0 评论 -
第八章 代码优化(1)
为了使编译程序能产生高质量的目标代码,常常需要对源程序的中间代码进行等价变换; 或者制定某种策略,使得所产生的目标代码能够较合理地利用目标计算机的资源。通常,我们把编译程序所完成的这一部分工作称为代码优化。不过,需要注意的是,这里所说的“优化” ,并非通常含义下的“最佳化” ,而仅仅是指某种相对的合理性。一个编译程序可以进行范围很广的优化工作:有在中间代码生成过程中的优化,有在小范围内对中间代原创 2014-06-18 22:24:06 · 488 阅读 · 0 评论 -
第九章 目标代码生成(1)
目标代码生成是编译程序的最后一个工作阶段。其任务是把先行阶段所产生的中间代码转换为相应的目标代码。一般而言,构造一个高效的代码生成程序并不容易,因为代码生成总是与某一具体的目标计算机密切相关,很难找到一种对各编译程序都普遍适用的好的生成算法。然而我们仍应研究这一课题,因为,一个精巧的代码生成程序所产生的目标代码,在执行效率上,要比那些拙劣的代码生成程序所产生的目标代码要高得多。对于一个好的代码原创 2014-06-18 22:43:21 · 2171 阅读 · 0 评论 -
第七章 运行时的存储组织和分配(1)
编译程序在其工作过程中,必须为源程序中所出现的一些量(常量、变量及某些数组等等)分配运行时的存储空间。存储分配方案的选择是否得当,将关系到计算机资源的合理使用,从而也将对编译系统的解题能力产生一定的影响。存储管理是指目标程序在运行时对内存的使用和再使用的安排。存储管理的策略要尽可能满足对内存使用的合理性和经济性,以及对程序中各个数据和实体访问的方便性。在实施存储管理时,应根据高级语言各自不同的原创 2014-06-16 22:44:58 · 506 阅读 · 0 评论 -
第六章 符号表(1)
在编译程序工作的过程中,需要不断收集、记录和使用源程序中一些语法符号(简称为符号)的类型和特征等相关信息。为方便起见,一般的做法是让编译程序在其工作过程中,建立并保持一批表格,如常数表、变量名表、数组名表、过程或子程序名表及标号表等等,我们将它们统称为符号表或名字表。符号表的每一登记项,将填入名字标识符以及与该名字相关联的一些信息。这些信息,将全面地反映各个符号的属性及它们在编译过程中的特征,诸如原创 2014-06-16 22:28:11 · 706 阅读 · 0 评论 -
第五章 语法制导翻译及中间代码生成(1)
由于编译程序工作的最终目标是将源程序翻译成可供计算机直接执行的目标程序,所以从整个编译过程来看,词法分析与语法分析仅仅是编译程序工作的一小部分。在早期的一些编译程序中,是在语法分析的基础上根据源程序中各语法成分的语义,直接产生机器语言或汇编语言形式的目标代码。虽然这种编译方式所需的时间较少,但具有很大的局限性,如不利于优化,编译程序难以移植,代码质量不高,等等。现在的编译系统,一般都是将经过语法分原创 2014-06-16 22:16:44 · 2354 阅读 · 0 评论 -
第四章 语法分析和语法分析程序(1)
一个字符串形式的源程序经词法分析之后,即被转换为一串单词符号,且其中的每一单词都按它们的内部形式来编码。语法分析程序以单词串形式的源程序作为输入或分析的对象。它的基本任务是:根据语言的语法规则(即根据描述该语言的前后文无关文法),分析源程序的语法结构,即分析如何由这些单词组成各种语法范畴(如下标变量、各种表达式、各种语句、程序段或分程序,乃至整个源程序等等),并在分析过程中,对源程序进行语法检原创 2014-06-16 22:05:37 · 1333 阅读 · 0 评论 -
第七章 运行时的存储组织和分配(3)——分配策略
2、运行时的分配策略图7 - 1 所示三个数据区的组织,各自使用了不同的存储分配策略。这些策略是:( 1 )、静态分配;( 2 )、栈式分配,或称栈式动态分配;( 3 )、堆式分配,或称堆式动态分配。下面将分别加以介绍。2.1、静态分配静态存储管理是一种最简单的存储管理。当在编译阶段能够确定源程序中各个数据实体的存储空间大小时,就可以采用静态存储管理。一般而言,适于静态原创 2014-06-16 23:06:35 · 884 阅读 · 0 评论