编译原理中重点整理

合集下载

编译原理知识点范文

编译原理知识点范文

编译原理知识点范文编译原理是计算机科学中的一门重要课程,它研究的是将高级语言程序转化为机器语言程序的过程。

编译原理主要包括词法分析、语法分析、语义分析、中间代码生成和目标代码生成等几个核心知识点。

一、词法分析词法分析是编译器的第一个阶段,它将输入的字符序列转换为有意义的单词序列。

词法分析器通过扫描输入字符的方式,识别并生成词法单元(Token),例如关键字、标识符、常量、运算符等。

具体的词法分析技术有有限自动机、正则表达式、状态图等。

二、语法分析语法分析是编译器的第二个阶段,它根据词法分析器生成的词法单元序列,分析语言的结构,并构造语法分析树。

语法分析树由各种语法规则组成,其中每个节点代表一个语法规则。

常用的语法分析算法有递归下降法、LL(1)分析法、LR分析法等。

三、语义分析语义分析是编译器的第三个阶段,它对语法树进行静态语义检查,并生成中间代码。

语义分析是一个比较复杂的过程,主要涉及类型检查、作用域分析、常量折叠、类型推导、中间代码生成等。

语义分析是编译原理中最核心的知识点之一四、中间代码生成中间代码生成是编译器的第四个阶段,它将经过语义分析的语法树转化为中间表示形式,以便进一步进行优化和目标代码生成。

中间代码的形式有很多种,常见的有三地址码、四元式、抽象语法树等。

中间代码生成的过程主要包括表达式的转换、控制流语句的转换等。

五、目标代码生成目标代码生成是编译器的最后一个阶段,它将中间代码转换为机器代码。

目标代码生成是编译原理中最复杂、也是最底层的知识点之一、目标代码生成涉及到寄存器分配、指令选择、指令调度、代码填充、代码优化等技术。

常见的目标代码形式有汇编代码、机器代码等。

六、优化优化是编译过程中非常重要的一个环节,它的目标是对生成的中间代码或目标代码进行优化,以提高程序的效率和性能。

常见的编译优化技术包括常量传播、公共子表达式消除、循环优化、函数内联等。

编译器的优化水平对程序的运行效率有着直接的影响。

编译原理重点

编译原理重点

编译原理重点第一章1.编译程序是计算机系统经典、核心的系统软件2.计算机需要把高级编程语言的程序翻译成机器语言代码或汇编语言才能运行3.如果源语言是高级编程语言,目标语言是机器代码和汇编语言这样的低级语言,这类翻译程序就叫做编译程序或编译器4.运行高级语言程序的另一种方式是解释执行,它需要的翻译程序不是编译程序,而是解释程序5.解释程序不产生源程序的目标代码,而是对源程序逐条语句进行分析6.Basic和多数脚本语言都是按照解释方式运行的7.解释方式的主要优点是便于对源程序进行调试和修改,但是其加工过程降低了程序的运行效率8.Java语言同时具有编译执行方式和解释执行方式9.9.计算机程序的编译过程类似,一般分为五个阶段:词法分析、语法分析、语义分析及中间代码生成、代码优化、目标代码生成10.词法分析的任务是逐步地扫描和分解构成源程序的字符串,识别出一个一个的单词符号或符号11.语法分析的任务是在词法分析的基础上12.语法分析不考虑语义,形式上构成13.语义分析的任务是检查程序语义的正确性,解释程序结构的含义14.语义分析包括检查变量是否有定义,变量在使用前是否具有值,数值是否溢出等。

15.语义分析完成之后,编译程序通常就依据语言的语义规则,利用语法制导技术把源程序翻译成某种中间代码。

所谓中间代码是一种定义明确、便于处理、独立于计算机硬件的记号系统,可以认为是一种抽象机的程序16.代码优化的主要任务是对前一阶段产生的中间代码进行等价变换,以便产生速度快、空间小的目标代码17.编译的最后一个阶段是目标代码生成,其主要任务是把中间代码翻译成特定的机器指令或汇编程序18.编译程序结构包括五个基本功能模块和两个辅助模块19.编译划分成前端和后端。

20.编译前端只依赖于源程序,独立于目标计算机。

编译前端的工作包括词法分析、语法分析、语义分析、中间代码生成、及其优化,文法错误的处理和符号表的组织也在编译前端完成。

编译原理知识点总结

编译原理知识点总结

编译原理知识点总结编译原理是计算机科学中的一个重要领域,它研究的是将高级程序语言转化为可执行目标代码的原理和方法。

在软件开发过程中,编译器起着至关重要的作用,因此了解编译原理的知识点对于理解和优化程序的性能至关重要。

1. 词法分析:词法分析是编译器的第一步,它将源代码划分为一个个的词法单元,如关键字、标识符、运算符等。

词法分析器通过正则表达式和有限自动机来实现,可以有效地将源代码转化为词法单元流。

2. 语法分析:语法分析是编译器的第二步,它通过语法规则将词法单元流转化为抽象语法树(AST)。

语法分析器使用上下文无关文法来描述语言的语法结构,并通过LL(1)分析、LR(1)分析等算法来构建抽象语法树。

3. 语义分析:语义分析是编译器的第三步,它对抽象语法树进行语义检查和类型推断。

语义分析器会检查变量的作用域、类型是否匹配等语义错误,并生成中间代码或目标代码。

4. 中间代码生成:中间代码生成是编译器的一项重要任务,它将抽象语法树转化为中间表示形式,如三地址码、四地址码等。

中间代码是一种抽象的低级语言,便于后续的优化和目标代码生成。

5. 代码优化:代码优化是编译器的关键环节,它通过对中间代码进行分析和优化,提高程序的执行效率和资源利用率。

常见的代码优化技术包括常量折叠、循环优化、函数内联等。

6. 目标代码生成:目标代码生成是编译器的最后一步,它将中间代码转化为目标机器代码。

目标代码生成器根据目标机器的特性和指令集,生成可执行的目标代码。

7. 符号表管理:符号表是编译器中用于管理变量、函数等符号信息的数据结构。

符号表包含了符号的名称、类型、作用域等信息,编译器在词法分析、语法分析和语义分析阶段使用符号表进行符号的查找和管理。

8. 错误处理:错误处理是编译器中一个重要的组成部分,它负责检测和报告源代码中的错误。

编译器需要能够准确地定位错误的位置,并给出有意义的错误信息,帮助程序员快速定位和修复错误。

编译原理涉及的知识点非常广泛,上述仅是其中的一部分。

编译原理要点整理

编译原理要点整理

编译原理要点整理//红色字体标注的是重点中的重点,大题的归宿第一章引论1.翻译器,编译器的定义2.编译器工作步骤和流程3.编译器前端后端的概念,理解为什么要有前端后端4.“遍”的概念第二章词法分析1.词法分析器的定义2.词法分析器所要完成的任务3.记号,模式,词法单元概念区分4.串的运算(和,连接,指数,闭包,正闭包)5.正规定义6.转换图(注意开始状态和结束状态以及需要将指针回退的状态)7.不确定的有限自动机(NFA)定义8.确定的有限自动机(DFA)定义9.从正规式到NFA(明确通过正规式如何构造连接运算,和运算,闭包运算的NFA)10.此方法产生的NFA的性质11.从NFA到DFA(子集构造法)12.DFA的化简(合并不可区别状态)13.从语言描述直接到DFA14.了解Lex学完本章:能语言描述改写成正规定义,能将正规定义转化为语言描述,给出一个正规式,能转换成相应的NFA,DFA并化简。

第三章语法分析1.上下文无关文法定义2.区分句子和句型3.最左推导&& 最右推导4.分析树5.文法二义性6.消除左递归&& 提左因子7.了解语言鸟瞰(0型文法:短语文法;1型文法:上下文有关文法;2型文法:上下文无关文法;3型文法:正规式)8.FIRST集合&& FOLLOW集合定义及计算方法9.LL(1)文法定义10.了解自上而下的递归下降的预测分析11.自上而下非递归的预测分析(详细明确预测分析器接受某一输入串时的具体过程,明确栈如何变化,输入输出如何变化)12.预测分析表的构造13.句柄的概念14.自下而上的分析方法:用栈实现移近-归约分析(详细明确预测分析器接受某一输入串时的具体过程,明确栈如何变化,输入输出如何变化)15.LR文法和LR分析算法16.构造SLR分析表(从文法构造识别活前缀的DFA(LR(0)项目集规范族),从DFA构造SLR分析表)17.构造规范的LR分析表(从文法构造识别活前缀的DFA(LR(1)项目集规范族),从DFA构造规范的LR分析表)18.构造LALR分析表(从文法构造识别活前缀的DFA(合并同心的LR(1)项目集),从DFA构造规范的LR分析表)(合并同心项目集可能会引起归约-归约冲突,不会引起新的移进-归约冲突)学完本章:能计算FIRST集合和FOLLOW集合;给定一个文法,能判断是否是LL(1)文法,并为其构造分析表;能构造LR(1)文法的三种预测分析表;明确移近归约分析中的每一个步骤,明确栈如何变化。

最全的编译原理知识点-完美总结

最全的编译原理知识点-完美总结

第一章1. 程序设计语言是人与计算机联系的工具,通过程序设计语言指挥计算机按照自己的意志进行运算和操作显示信息和输出运算结果。

2. 最早的计算机程序设计语言是机器语言(指令系统)。

机器语言中的指令都是用二进制代码直接表示的。

3. 机器语言和符号语言以及汇编语言都是低级程序设计语言。

4. 1954年FORTRAN I语言的问世标志计算机高级程序设计语言的诞生。

5. 计算机高级程序设计语言独立于机器,比较接近于自然语言,容易学习掌握,编写程序效率高,编写的程序易读易理解易移植。

6. 翻译程序:将高级语言编写的程序翻译成机器语言。

7. 编译程序的工作过程:编译程序这要功能是将源程序翻译成等价的目标程序,这个翻译过程分为词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。

8. 编译程序的重要意义在于它使高级语言独立于机器语言,使程序员用高级语言编写程序时不必考虑那些直接与机器有关的琐碎的环节,这些细节由编译程序区处理。

9. 编译程序包括:词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序和目标代码生成程序以及表格处理程序和出错处理程序。

10.编译程序的组织方式:编译过程分为六个阶段,改划分是编译程序的逻辑组织方式。

编译过程分为前端和后端。

前端包括词法分析、语法分析、语义分析、中间代码生成、代码优化。

后端包括目标代码生成,依赖于计算机的硬件系统和机器指令系统。

这种组织方式便于编译程序的移植,如果移植到不同类型的机器上只需修改编译程序的后端即可。

11.翻译方式:编译方式和解释方式。

12.源程序:用高级语言编写的程序。

源程序是编译程序加工的对象。

13.编译方式:先将源程序翻译成汇编语言程序或机器语言程序(目标程序),然后再执行。

这个翻译程序为编译程序.14.编译方式中源程序的编译和目标程序的运行时分成两个阶段完成的。

编译所的目标程序计算机暂时不能执行,必须由连接装配程序将目标程序和编译程序及系统子程序连接成一个可执行程序,这个可执行程序可直接被计算机执行。

《编译原理》重点知识总结

《编译原理》重点知识总结

《编译原理》知识点总结目录第一章引论第二章高级语言及其语法描述第三章语法分析——自上而下分析第四章属性文法和语法制导翻译第五章语义分析和中间代码产生第六章优化第一章引论一.编译程序(compiler):把某一种高级语言程序等价地转换成另一种低级语言程序(如汇编语言或机器语言程序)的程序二.编译程序的工作的五个阶段:词法分析、语法分析、中间代码产生、优化、目标代码产生1.词法分析任务: 输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单词符号。

依循的原则:构词规则描述工具:有限自动机FOR I := 1 TO 100 DO保留字标识符等符整常数保留字整常数保留字2.语法分析任务:在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位。

依循的原则:语法规则述工具:上下文无关文法3.语义分析与中间代码产生任务:对各类不同语法范畴按语言的语义进行初步翻译。

(变量是否定义、类型是否正确等)依循的原则:语义规则中间代码:三元式,四元式,逆波兰记号,树形结构等。

是一种独立于具体硬件的记号系统。

例:将Z:=X + 0.618 * Y 翻译成四元式为(1) * 0.618 Y T1(2) + X T1 T2(3) := T2 _ Z4. 优化任务:对于前阶段产生的中间代码进行加工变换,以期在最后阶段产生更高效的目标代码。

依循的原则:程序的等价变换规则FOR K:=1 TO 100 DOBEGINM := I + 10 * K;N := J + 10 * K;END4.目标代码产生任务: 把中间代码变换成特定机器上的目标代码。

依赖于硬件系统结构和机器指令的含义目标代码三种形式:a)绝对指令代码: 可直接运行b)可重新定位指令代码: 需要连接装配c)汇编指令代码: 需要进行汇编第二章高级语言及其语法描述2.1.1语法词法规则:单词符号的形成规则。

a)单词符号是语言中具有独立意义的最基本结构。

编译原理知识点

编译原理知识点

编译原理知识点(总7页) -CAL-FENGHAI.-(YICAI)-Company One1-CAL-本页仅作为文档封面,使用请直接删除1.解释程序:不生成目标代码编译程序:生成目标代码2.编译程序组成:8个分析< 前端 >:(词法分析程序、语法分析程序、语义分析程序、中间代码生成程序)综合< 后端 >:(代码优化程序、目标代码生成程序)贯穿始末:表格管理程序、出错处理程序3.文法四元组:终结符号集合Vt 、非终结符号集合Vn、产生式集合P、识别符号(开始符号)SV T∩V N=Φ文法 -> 语言(推导、规约)唯一;语言 -> 文法(凑规则)不唯一。

4.文法分类:0型文法(短语结构文法):左侧至少含有一个非终结符1型文法(上下文有关文法):左侧长度 <= 右侧长度 S->ε除外, S不能出现在右侧2型文法(上下文无关文法):左侧只能有一个非终结符 ( 语法分析 )3型文法(正规文法):A-> aB A->a 右线性; ( 词法分析 )A->Ba 或A->a 左线性(看非终结符位置)5.A*= A0 ∪A+ A0 ={ε} != { } =Φ空集A+ = AA* = A*A6.句型:符号串x是从识别符号S推导出来的,x称为一个句型句子:x仅由终结符号组成,仅含终结符号的句型是一个句子短语:子树的末端(叶子)从左至右连成的串(包括整棵语法树)简单子树:只含有单层分枝的子树直接短语( 简单短语 ):由简单子树的叶子组成句柄:最左边的直接短语(不一定含终结符)素短语:至少含有一个终结符的短语,并且除它自身之外不再含任何更小的素短语最左素短语:最左边的素短语短语:P(相对于T、E)、 P+T(相对于E)、i(相对于P、F)、P+T+i(相对于E)直接短语:P、i 句柄:P (最左边的直接短语)素短语:P+T 、i (至少含有一个终结符的短语)最左素短语:P+T7.二义性文法:有两个不同的最左推导或有两个不同的最右推导或能产生两棵语法树8.文法产生式正规式规则1 A xB B y A = xy规则2 A xA|y A = x*y 右线性A Ax|y A = yx* 左线性规则3 A x A y A = x|y9.DFA 初态唯一,转换函数为单值映射表示方式:转移矩阵、状态转换图状态转换图上若存在一条从初态到某一终态的道路,且这条路上所有弧的标记符连成的字符串为t,则称t被DFA接受。

编译原理中重点整理

编译原理中重点整理

编译原理中重点整理1.翻译程序:将某一种语言(源语言)程序转换为与其逻辑上等价的另一种语言(目标语言)程序。

编译程序:源语言为高级语言,目标语言为汇编语言或机器语言的翻译程序。

汇编程序:源语言为汇编语言,目标语言为机器语言的翻译程序。

解释程序:源语言程序作为输入,但不产生目标程序,而是边解释边执行源程序本身。

2.解释器与编译器的主要区别在于:运行目标程序时的控制权在解释器而不在目标程序。

3.编译程序的工作过程可划分五个阶段:①词法分析:从左到右一个字符一个字符的读入源程序,对构成源程序的字符串进行扫描和分解,从而识别出一个个单词(也称单词符号或简称符号)②语法分析:在词法分析的基础上将单词序列分解成各类语法短语,如“程序”,“语句”,“表达式”等等③语义分析和中间代码生成:语义分析是在语法分析程序确定出语法短语后,审查有无语义错误,并为代码生成阶段收集类型信息。

完成语法分析和语义处理工作后,编译程序将源程序变成一种内部表示形式,这种内部表示形式叫做中间语言或称中间代码,它是一种结构简单、含义明确的记号系统。

④代码优化:为了使生成的目标代码更为高效,可以对产生的中间代码进行变换或进行改造,这就是代码的优化。

⑤目标代码生成:目标代码生成阶段的任务就是是把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。

4.前端(Front-End)——与目标机无关的部分后端(Back-End )——与目标机有关的部分5.编译系统:编译程序与运行系统合称编译系统6.遍:对源程序或源程序的中间结果从头到尾扫描一次,并做有关的加工处理,生成新的中间结果或目标程序。

7.文法是一个四元组:G[S]=(VN, VT, P, S)VN:非终结符集合;VT :终结符集合;P :产生式集合(α→β或α∷=β);S :开始符号(或称根符号,识别符号)。

若S ->α,α∈V*,则称α为文法G的句型若S ->α,α,α∈VT*,则称α为文法G的句子语言是所有句子构成的集合,它是所有终结符号串所组成的集合VT*的子集,即L(G) VT* 8.0型文法又叫短语文法,它所确定的语言称为0型语言。

编译原理重点

编译原理重点

编译原理重点第⼀章1. 机器语⾔:计算机能执⾏的语⾔。

2. 翻译器:能够完成⼀种语⾔到另⼀种语⾔的转换的软件。

3. 源语⾔:需要翻译的语⾔。

4.⽬标语⾔:被翻译成的语⾔。

编译的各阶段:每个阶段的输⼊输出(注意顺序)字符流第⼆章1. 词法分析:词法分析是编译的第⼀阶段,它的主要任务是扫描输⼊字符流,产⽣⽤于词法分析的词法记号序列。

源程序2. 词法记号:由记号名和属性值构成的⼆元组,属性值有时不必要。

记号名是代表⼀类词法单元的抽象名字,如标识符、某个特定的关键字。

3. 模式:记号的模式描述属于该记号的词法单元的形式。

在⼀个关键字作为⼀个记号的情况下,它的模式就是构成该关键字的字符序列。

4.词法单元:单词,是源程序中匹配⼀个记号模式的字符序列,它有词法分析器标识为该记号的实例。

5.例2.1Position = initial + rate * 60 的记号⽤⼆元组序列表⽰:-------唯⼀的,所以可以省略属性值6.字母表:表⽰符号的有限集合。

7.串:字母表中符号的⼜穷序列。

8.串的长度:串s的长度是出现在s中的符号的个数,写为|s|;空串长度为0 记为ε。

9.语⾔:表⽰字母表上的⼀个串集,属于该语⾔的串称为该语⾔的句⼦或字。

10.P17:表2.2语⾔运算的定义,例2.2、例2.3、表2.3正规式的代数定理11.P23:不确定的有限⾃动机(NFA)、P24:确定的有限⾃动机(DFA)-------NFA—DFA转化、DFA 化简。

12.P36—37: 习题2.3、2.7、2.8、2.11、2.12.● 2.3叙述由下列正规式描述的语⾔0(0|1)*0—以0开头和结尾的,长度⾄少是2的01串。

((ε|0)1*)*—所有的01串。

(0|1)*0(0|1)(0|1)—倒数第3位是0的01串。

0*10*10*10*—含有3个1的01串。

(00|11)*((01|10)(00|11)*(01|10)(00|11)*)* —含有偶数个0和偶数个1的01串。

编译原理资料精选全文完整版

编译原理资料精选全文完整版

可编辑修改精选全文完整版1、变量及其属性变量是对一个(或若干个)存储单元的抽象,赋值语句则是修改存储单元内容的抽象。

变量除名字外,具有四个属性:作用域、生存期、值和类型1.变量的作用域:变量的作用域是指可以访问该变量的程序范围。

①静态作用域绑定:按照程序的语法结构定义变量的作用域。

②动态作用域绑定:按照程序的执行动态地定义变量的作用域。

2.变量的生存期:一个存储区绑定于一个变量的时间区间,称为变量的生存期。

数据对象:存储区和它保存的值分配:变量获得存储区的活动长度:变量所分配的存储单元的个数3.变量的值——存储区单元的内容匿名变量的访问通过指针实现变量与它的值的绑定是动态的符号常数的值不能修改变量的初始化不初始化则出错;随机;缺省值0。

4.变量的类型①类型:变量的类型可以看成与变量相关联的值的类,以及对这些值进行的操作的说明。

类型可用来解释变量绑定的存储区的内容(二进制位串)的意义;语言定义时,类型名通常绑定于某一个值类和某一组操作;语言实现时,值和操作绑定于某种机器二进制表示。

②静态绑定:通过说明语句完成如:Pascal、Fortran③动态绑定:执行时隐式说明,且动态变化如:APLA←5 整型→A 标号、转到AA ←1 2 51 0 一维数组( A ←0 )A[2:3] ←0 二维数组A ←B+C2、虚拟机的概念:虚拟机是由软件实现的机器3、程序单元及单元实例1.程序单元:程序执行过程中的独立调用单元。

如子程序,分程序,过程等。

2.单元表示编译时,一个单元的源程序。

运行时,单元表示由一个代码段和一个活动记录组成,称为单元实例。

3.活动记录:执行单元所需要的信息,以及该单元的局部变量所绑定的数据对象的存储区。

4.非局部变量:一个程序单元可以引用未被本单元说明而被其它单元说明的变量。

5.引用环境:局部变量+非局部变量。

6.别名:同一单元的引用环境中有两个变量绑定于同一数据对象,称这些变量具有别名。

编译原理重点

编译原理重点
熟练掌握递归下降分析基本方法:清除ห้องสมุดไป่ตู้递归,清除回溯,构造递归下降子程序,熟练掌握预测分析程序的基本原理和预测分析表构造,理解LL(1)方法的定义。
(5)语法分析——自下而上分析
熟练掌握算符优先分析基本方法:算符优先表和算符优先函数,构造技术,熟练掌握LR分析器,LR(0)项目集族和LR(0)分析表的构造,SLR分析表的构造,规范LR分析表的构造。
理解符号表的作用,掌握符号表的组织和使用方法。
(9)运行时存储空间组织
正确理解目标程序运行时存储空间的使用和组织管理方式,理解静态存储分配和动态存储分配基本思想,掌握栈式动态分配中活动纪录和Display表作用,组织,内容及使用。
(10)优化
正确理解代码优化的概念,掌握用DAG表示进行局部优化的方法。
(6)属性文法和语法制导翻译
理解属性文法,重点掌握S-属性文法的自下而上计算,L-属性文法和自顶向下翻译。
(7)语义分析和中间代码产生
重点掌握三种中间语言:后缀式,四元式,三地址代码,掌握各种语句到四元式的翻译方法,包括说明语句,赋值语句,布尔表达式,控制语句,数组引用,过程调用等。
(8)符号表
正规表达式,NFA,DFA,词法分析器设计。
(4)语法分析-自上而下分析
清除左递归,提左因子,递归下降子程序,预测分析表构造,LL(1)方法。
(5)语法分析-自下而上分析
算符优先表构造,符符优先函数构造,LR(0)分析表构造,SLR分析表构造,以及规范LR分析表构造。
(6)属性文法和语法引导翻译
(1)引论
了解编译程序,编译过程,编译程序的结构,编译程序生成,学习构造编译程序。
(2)高级语言及其语法描述

计科1201编译原理整理

计科1201编译原理整理

计科1201编译原理知识点:1.编译过程:词法分析、语法分析、语义分析及中间代码生成、中间代码优化、目标代码生成。

2.常见的错误分类:词法错误、语法错误、语义错误。

3.文法的四要素:Vn(非终结符集)、Vt(终结符集)、P(产生式集)、S(开始符)。

4.逆波兰式(后缀式)。

5. 最左推导的逆是最右归约,最右推导的逆是最左归约。

规范推导是(最右推导),规范归约是(最左规约)。

6. 优化依据的原则:等价变换。

7. 句柄:最左简单短语;最左归约:每次归约的是句柄。

8. 消除文法二义性的方式:(1、改写文法,2、添加限制条件)。

9. Chomsky文法的分类:0型文法(无限制文法)识别机制是图灵机(TM)、1型文法(上下文有关文法)识别机制是线性界限自动机LBA、2型文法(上下文无关文法)识别机制是下推自动机PDA,是语法分析的文法基础、3型文法(正规文法RG)识别机制是有限状态自动机FA是词法分析的文法基础。

10.由不确定的有限自动机NFA变为确定有限自动机DFA采用的是(子集法)。

11.确定有限自动机DFA化简采用的方法是(最小化)。

12.语法分析方法的分类分为自上而下和自下而上。

自上而下分析法是边推导边分析,而自下而上分析法是边归约边分析。

13.对于同一个句子至少有2棵不同的语法树,该文法必为二义的。

14.┣K 表示自动机做了K步动作;┣* 表示自动机做了0步动作或0步以上动作;┣+ 表示自动机做了1步动作或1步以上动作。

15. 正规文法=右线性文法⊕左线性文法。

16.左线性文法和右线性文法都是3型文法17. 自上而下语法分析可能面对的两个问题:左递归、回溯。

18. 自上而下语法分析方法有:(递归下降法,LL(1)分析法)。

19. 消除直接左递归的方法是:(改成右递归)。

20. 消除间接左递归:先排序,转化为直接左递归。

21. PDA规约过程的4种可能动作:移进(s)、归约(r)、接受(acc)、出错(error)。

编译原理重点

编译原理重点

1语言分类:论基础分为4类语言: 强制式语言:基础是冯·诺依曼模型;函数式语言;基础是数学函数(函数运算);逻辑式语言:基础是数理逻辑、谓词演算;对象式语言:基础是抽象数据类型。

按2语言的发展进程分类: 第一代语言(机器语言)第二代语言(汇编语言)第三代语言(高级语言:命令式、过程式)第四代语言(说明性语言、超高级语言)新一代语言(函数式、逻辑式语言)3冯.诺依曼体系结构:三大特性:①变量存储单元及名称由变量的概念代替。

变量可以代表一个或一组单元。

②赋值存储(中间、最终的)计算结果。

③重复语句顺序执行,指令存储在有限的存储器中,完成复杂计算时需要重复执行某些指令序列。

4绑定(Binding)概念:实体:程序的组成部分,如变量,表达式、程序单元等。

属性:实体具有的特性。

绑定:实体与其各种属性建立起某种联系的过程称为绑定,实际上就是建立了某种约束。

描述符:描述实体属性的表格。

若绑定在运行之前(即编译时)完成,且在运行时不会改变,则称为静态绑定。

若绑定在运行时完成,则称为动态绑定。

5冯.诺依曼体系结构的特点:数据或指令以二进制形式存储;“存储程序”的工作方式;程序顺序执行;存储器的内容可以被修改6虚拟机是由实际机器加软件实现的机器。

若一台实际机器配置上C语言编译程序,对用户来说,这台机器就是C语言的虚拟机7变量是对一个或若干个存储单元的抽象。

一个存储单元至少一个字节。

一个变量至少占用一个存储单元。

赋值是对修改存储单元内容的抽象。

8属性:变量的作用域:可以访问该变量的程序范围。

变量的生存期:存储单元绑定于一个变量的时间区间。

变量的值:存储区单元的内容。

变量的类型:与变量相关联的值,以及对这些值进行的操作的抽象9程序单元是指程序执行过程中可独立调用的单元,编译时,一个源程序称为一个单元表示,运行时,一个单元表示由一个代码段和一个活动记录组成此时称单元表示为单元实例。

10.别名和副作用:引用环境中有两个变量绑定于同一数据对象,则称这些变量具有别名。

编译原理知识点

编译原理知识点

第一、二章引论、高级语言及其描述1、用汇编语言或高级语言编写的程序,必须先送入计算机,经过转换成用机器语言表示的目标程序(这个过程叫做编译),才能由计算机执行。

执行转换过程的程序叫做编译程序。

汇编程序是指没有编译过的汇编语言源文件。

编译程序转换过的叫做目标程序,也就是机器语言。

2、编译程序是一种翻译程序3、通常一个编译程序中,不仅包含词法分析、语法分析、中间代码生成、代码优化、目标代码生成等五个部分,还应包括表格处理和出错处理,其中中间代码生成和代码优化不是每个编译程序都必须的。

4、产生式是用于定义语法成分的一种书写规则。

5、四种类型的文法的主要特点:6、解释程序和编译程序的区别在于是否生成目标程序。

7、中间代码有:逆波兰记号、树形表示、三元式、四元式等形式8、语法制导翻译即可用来产生中间代码,也可以用来产生目标指令,甚至可用来对输入串进行解释执行。

第三章词法分析3.1 确定的有限自动机DFA M是一个五元组M =(S,∑,δ ,S0 ,F )(1) S 是一个非空有限集,它的每个元素称为一个状态(2)∑是一个有穷字母表,它的每个元素称为一个输入符号,所以也称为输入符号字母表(3)δ是状态转换函数,是在S×å→S上的单值映射(4) s0 s0∈S,是唯一的一个初态(5) F F含于S,可空,是一个终态集,终态也称可接受状态或结束状态3.2 一个NFA M是五元式M=(S,S,δ,S0,F)(1)S 有穷非空状态集合(2)∑ 有穷的输入字母表集合(3)δ 从S´∑*到S的子集的映射(4)S0Í 是S的非空子集,称为初始状态集合(5)F Í 是S的子集(可空),称为终止状态集合3.3 DFA与NFA特点比较DFA特点:1. 初态唯一2. 输入字符不包括空符号串3. 有向边上只有一个字符4. 一个状态对某个字符最多只有一条出边NFA特点:1. 初态不唯一2. 输入字符包括空符号串3. 有向边上可以为字符串4. 一个状态对某个字符可能有多条输出边,即状态的后继不唯一3.4 词法分析是基于正则文法进行,即识别的单词是该文法的句子;语法分析基于上下文无关文法进行,即识别的是该类文法的句子。

编译原理期末复习

编译原理期末复习

编译原理期末复习编译原理是计算机科学与技术专业的一门重要基础课程,它研究的是程序设计语言在计算机上的实现方式。

编译原理的学习主要涉及到词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等内容。

针对这些方面,下面将对编译原理的重要内容进行总结和复习。

一、词法分析词法分析是编译过程的第一步,其主要目的是将源程序中的字符序列划分成词法单位。

常用的词法单元有关键字、标识符、常数、运算符、界符等。

词法分析通过有限自动机或正则表达式来实现。

二、语法分析语法分析是将词法分析阶段生成的词法单元流转化为一个抽象语法树。

语法分析的主要工作是根据给定的语法规则,将输入串分析成语法树。

语法分析有两种主要方法:基于文法的自上而下的分析和基于文法的自下而上的分析,常用的算法包括LL(1)、LR(1)、SLR(1)和LALR(1)等。

三、语义分析语义分析是对语法分析的结果进行语义检查和语义动作的计算。

语义分析的主要任务是检查源程序是否符合语义规则,计算符号的类型和值,并生成中间代码。

语义分析常用的方法包括语义制导翻译和符号表的建立。

四、中间代码生成中间代码是指在编译过程中生成的一种可以被多次优化和被不同目标代码生成程序使用的代码。

中间代码生成的目的是将源程序翻译成其中一种中间形式,便于进一步优化和生成目标代码。

中间代码生成的方法有三地址码、四地址码和虚拟机代码等。

五、代码优化代码优化是编译过程中的重要环节,其主要目的是对中间代码进行优化,使得生成的目标代码更加高效和紧凑。

代码优化使用各种数据流分析、指令调度和寄存器分配等技术,常用的优化方法有常量传播、公共子表达式消除、代码移动和死代码消除等。

六、目标代码生成目标代码生成是将中间代码转化为目标机器代码的过程,目标代码生成需要考虑目标机器的特性和限制。

目标代码生成包括指令选择、寻址方式的选择和寄存器分配等步骤。

常用的技术有基于各种寻址方式的代码选择算法、寄存器分配算法和指令调度算法等。

编译原理知识点精选全文完整版

编译原理知识点精选全文完整版

可编辑修改精选全文完整版第一章编译概述1.1 翻译程序的三种方式1.编译:将高级语言编写的源程序翻译成等价的机器语言或汇编语言。

2.解释:将高级语言编写的源程序翻译一句执行一句,不生成目标文件,直接执行源代码文件。

3.汇编:用汇编语言编写的源程序翻译成与之等价的机器语言。

1.2 编译程序的五个阶段1.词法分析:对源程序的字符串进行扫描和分解,识别出每个单词符号。

2.语法分析:根据语言的语法规则,把单词符号分解成各类语法单位。

3.语义分析与中间代码生成:对各种语法范畴进行静态语义检查,若正确则进行中间代码翻译。

4.代码优化:遵循程序的等价变换规则。

5.目标代码生成:将中间代码变换成特定机器上的低级语言代码。

第二章文法和语言2.1 符号串和语言2.1.1 字母表1.定义:字母表是有穷非空的符号集合。

2.表示:通常用字母表大写字母A,B,…Z和希腊字母Σ表示。

eg:A={0,1},Σ={a,b,c,d}3.说明1)字母表包含了语言中所允许出现的一切符号。

2)字母表中的符号也称字符。

2.1.2 符号串1.定义:由字母表中的符号组成的有穷序列。

2.表示:通常由t,u,v,w,x,y,z等小写英文字母来表示。

3.说明1)符号串由构成的符号的种类、数量、顺序共同决定。

2)不包含任何符号的符号串称为空符号串,简称空串,用ε表示。

4.对于给定的字母表Σ,符号串的递归定义如下:1)ε是Σ上的一个符号串。

2)若x是Σ上的符号串,a是Σ的符号,则xa是Σ上的符号串。

并规定εa=a,aε=a3)y是Σ上的符号串,当且仅当y由1)和2)导出。

5.子符号串:一个非空符号串中若干连续符号组成的部分。

6.字符串的前缀和后缀若z=abd是字母表Σ={a,b,c,d}上的符号串,则ε,a,ab,abd都是z的前缀;ε,d,bd,abd都是z的后缀。

(正序逆序排序即可,前缀为正序排序的所有子串,后缀为逆序排序的所有子串)7.符号串之间的运算1)连接:符号串x,y的连接xy就是把符号串y写在x后面得到的字符串。

编译原理重点

编译原理重点

编译原理重点第一章1.编译原理所讨论的问题,就是如何把符合人类思维方式的、用文字描述的意愿(源程序)翻译成计算机能够理解和执行的形式(目标程序)。

具体实现从源程序到目标程序转换的程序,被称为编译程序或编译器。

2. 用符号表示的指令被称为汇编指令。

3.汇编指令的集合被称为汇编语言。

4.由汇编语言编写的指令序列被称为汇编语言程序。

5.通用程序设计语言是继汇编语言之后发展起来的应用最广的一类语言。

6.语言分为三个层次:高级语言、汇编语言、机器语言。

高级语言之间的翻译被称为转换或者预处理;高级语言可以直接翻译成机器语言,也可以直接翻译成汇编语言,这两个翻译过程被称为编译;从汇编语言到机器语言的翻译称为汇编;把机器语言翻译成汇编语言或者把汇编语言翻译成高级语言,分别称它们为反汇编和反编译。

7.公认为最早的编译器是50年代末研制的FORTRAN编译器。

8.解释器与编译器的主要区别:运行目标程序时的控制权在解释器而不在目标程序。

9.通用程序设计语言的典型特征之一是抽象,其抽象程度是以程序设计语言所支持的基本结构为特征的,可以大致划分为三种形式:过程、模块(抽象数据类型、ADT)和类。

10.编译器的工作阶段:符号表管理器(词法分析器、语法分析器、语义分析器、中间代码生成器、代码优化器、目标代码生成器)出错处理器。

11. 编译器从左到右扫描输入该语句,首先进行的是此法分析。

词法分析器的输入是源程序,输出的是识别出的记号流。

12.语法分析器以词法分析器返回的记号流为输入构造句子的结构,并以树的形式表示出来,称之为语法树。

13.语义分析器根据语法分析器够早的语法树,进行适当的语义处理。

对于声明语句,进行符号表的查填。

14.编译器生成的目标程序代码的多种形式:汇编语言形式、可重定位二进制代码形式、内存形式。

15.我们把每个阶段将程序完全扫描一遍的工作模式称为一遍扫描。

第二章1.组成语句的基本单元也可根据其在句子中的作用分类,最基本的分类有四类:关键字(保留字)、标示符、字面量、特殊符号。

编译原理重点

编译原理重点

编译原理什么是编译程序?编译程序也叫编译系统,是把用高级语言编写的面向过程的源程序翻译成目标程序的语言处理程序。

编译的各个阶段什么是文法?文法是以又穷的集合刻画无穷的集合的一个工具。

1、字母表:它是非空有穷集。

例如:∑={a,b,c}或∑={1,2,3}2、符号:字母表中的元素称为符号。

3、符号串:符号的有穷序列,符号串也称为字。

用ε来表示空符号串。

例如:a,ab,abc4、长度:符号串的长度是指该串所包含的符号个数。

用|x|表示符号串x的长度。

例如:|a|=1,|abn|=35、连结:设x和y为符号串,则称xy 为他们的连结。

例如:x=aa,y=bb,则xy=aabb6、空集:不含任何元素的集合,记为 。

7、乘积:设A和B是符号串集,则用AB表示A和B的乘积。

A={a,b},B={c,d},则AB={ac,ad,bc,bd}8、方幂:设A为符号串集,则定义A0={ε}A1=AA n=A n-1 A例如:A={a,b} 则有:A0={ε} A1={a,b}A2={aa,ab,ba,bb}9、正闭包:设A为符号串集,则用A+表示A的正闭包,其具体定义如下:A+=A1∪A2∪A3∪⋯…例如:A={a},A+={a,aa,aaa,……}10、星闭包:设A为一集合,则定义A的星闭包为A* ,其具体定义如下A*=A0∪A+例如:A={a},A*={ε,a,aa,aaa,……}文法G定义为四元组(V N,V T,P,S )其中V N为非终结符号(或语法实体,或变量)集;V T为终结符号集;P为产生式(也称规则)的集合;V N,V T和P是非空有穷集。

S称作识别符号或开始符号,它是一个非终结符,至少要在一条产生式中作为左部出现。

V N和V T不含公共的元素,即V N∩V T = φ用V表示V N ∪V T,称为文法G的字母表或字汇表例文法G=(V N,V T,P,S)V N = { S }, V T ={ 0, 1 }P={ S→0S1, S→01 }S为开始符号推导:用若干次产生式可从x串导出y串,则称y为x的推导,记为x y。

《编译原理》重点知识总结

《编译原理》重点知识总结

《编译原理》重点知识总结一、编译器的基本概念1.编译器的定义:编译器是一种将高级语言程序转换为低级语言程序的软件工具。

2.编译器的主要任务:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成等。

二、词法分析1. 词法分析的任务:将源程序的字符序列转换为有意义的词法单元(token)序列。

2.词法单元的分类:关键字、标识符、运算符、界限符等。

3.词法分析器的实现方法:有限状态自动机(DFA)、正则表达式、词法规则等。

三、语法分析1.语法分析的任务:根据语法规则,将词法单元序列转换为抽象语法树(AST)。

2.语法分析器的实现方法:上下文无关文法(CFG)、递归下降分析、LL(1)分析器、LR分析器等。

四、语义分析1.语义分析的任务:对抽象语法树进行静态语义检查,确定语法结构的含义和约束。

2.语义分析的主要内容:类型检查、作用域分析、常量折叠、中间代码生成等。

五、中间代码生成1.中间代码的定义:介于源程序和目标代码之间的一种抽象表示形式,可以是三地址代码、四元式、虚拟机代码等。

2.中间代码生成的方法:递归下降、语法制导翻译、语法制导的翻译方案等。

六、代码优化1.代码优化的目的:提高程序的执行效率和资源利用率,减小目标代码的体积。

2.常见的代码优化技术:常量传播、代码移动、循环优化、函数内联等。

七、目标代码生成1.目标代码的定义:能够被底层硬件直接执行的机器指令。

2.目标代码生成的方法:模板匹配、基本块划分、寄存器分配等。

八、词法分析器和语法分析器的生成工具1. Flex:用于生成词法分析器的工具。

2. Bison:用于生成语法分析器的工具。

3. Lex:Flex的前身,用于生成词法分析器。

4. Yacc:Bison的前身,用于生成语法分析器。

九、常用的编程语言1. 静态类型语言:C、C++、Java、C#等。

2. 动态类型语言:Python、JavaScript、Ruby等。

3. 函数式编程语言:Lisp、Haskell、Erlang等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.翻译程序:将某一种语言(源语言)程序转换为与其逻辑上等价的另一种语言(目标语言)程序。

编译程序:源语言为高级语言,目标语言为汇编语言或机器语言的翻译程序。

汇编程序:源语言为汇编语言,目标语言为机器语言的翻译程序。

解释程序:源语言程序作为输入,但不产生目标程序,而是边解释边执行源程序本身。

2.解释器与编译器的主要区别在于:运行目标程序时的控制权在解释器而不在目标程序。

3.编译程序的工作过程可划分五个阶段:①词法分析:从左到右一个字符一个字符的读入源程序,对构成源程序的字符串进行扫描和分解,从而识别出一个个单词(也称单词符号或简称符号)②语法分析:在词法分析的基础上将单词序列分解成各类语法短语,如“程序”,“语句”,“表达式”等等③语义分析和中间代码生成:语义分析是在语法分析程序确定出语法短语后,审查有无语义错误,并为代码生成阶段收集类型信息。

完成语法分析和语义处理工作后,编译程序将源程序变成一种内部表示形式,这种内部表示形式叫做中间语言或称中间代码,它是一种结构简单、含义明确的记号系统。

④代码优化:为了使生成的目标代码更为高效,可以对产生的中间代码进行变换或进行改造,这就是代码的优化。

⑤目标代码生成:目标代码生成阶段的任务就是是把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。

4.前端(Front-End)——与目标机无关的部分后端(Back-End )——与目标机有关的部分5.编译系统:编译程序与运行系统合称编译系统6.遍:对源程序或源程序的中间结果从头到尾扫描一次,并做有关的加工处理,生成新的中间结果或目标程序。

7.文法是一个四元组:G[S]=(VN, VT, P, S)VN:非终结符集合;VT :终结符集合;P :产生式集合(α→β或α∷=β);S :开始符号(或称根符号,识别符号)。

若S ->α,α∈V*,则称α为文法G的句型若S ->α,α,α∈VT*,则称α为文法G的句子语言是所有句子构成的集合,它是所有终结符号串所组成的集合VT*的子集,即L(G) VT* 8.0型文法又叫短语文法,它所确定的语言称为0型语言。

1型文法,上下文敏感文法或上下文有关文法。

2型文法,上下文无关文法3型文法线性文法、正则文法或正规文法规范(最右)推导即任何一步α->β都是对α中的最右非终结符进行替换的,规范(最左)归约文法可唯一地确定一个语言子树与短语:在句型所对应的语法树中,若某些符号按从左到右的顺序组成某棵子树的末端结点,那么由这些末端结点所组成的符号串是相对于子树根结点的短语。

原则上语法树有多少棵子树,就有多少个短语。

9.词法分析的主要工作:从源程序的第一个字符开始,从左到右扫描源程序,一次读一个字符,根据词法规则将有关字符组合成单词,并识别各类单词,当确定单词类别后,将单词输出。

10.正规文法所描述的是字汇表V(VN∪VT)上的一些特殊子集,称为正规集。

也称正则表达式11.一个确定有限自动机(DFA)M是一个五元组:M=(S,Σ,f,S0,F),S是一个非空有限集,它的每个元素称为一个状态Σ是一个有限的输入字母表,它的每个元素称为一个输入字符f是转换函数,它是从S ×Σ到S的单值部分映射S0∈S,是唯一的初始状态F 属于S,是终止状态集合。

状态转换图是有限自动机的一种表示形式12.一个非确定的有限自动机(NFA) M是一个五元组:M=(S ,Σ,f,S0,F)S是一个非空有限集,它的每个元素称为一个状态Σ是一个有限的输入字母表,它的每个元素称为一个输入字符f是转换函数,它是从S ×Σ*到2S的子集的映象S0 属于S是一个非空的初始状态集,初态可以是多个F 属于S,是终止状态集合13.语法分析是整个编译过程的核心部分,它完成的任务是:按照文法从源程序单词串(符号串)中识别各类语法成分,判断所给出的单词串是否是给定文法的正确句子,并为语义分析和代码生成做准备。

14.按照语法分析树的建立方法可以将语法分析方法分为:自上而下分析法、自下而上分析法。

15.确定的自上而下分析:算法思想:对于任一输入符号串,从文法的识别符号出发,根据当前的输入符号,唯一确定一个产生式,用产生式右部的符号串替代相应的非终结符往下推导,或构造一棵语法树。

若能推导出输入串或构造语法树成功则输入串是句子,否则不是。

16.LL(1)文法满足确定的自上而下的分析方法。

条件:①文法不含左递归。

②对文法中每一个非终结符A的各个产生式的候选首符集两两不相交。

若 A α1 | α2 |…| αn则FIRST(αi) ∩FIRST(αj)=Φ(i≠j)③对文法中每一个非终结符A,若存在某个候选首符集包含 ,则FIRST(A)∩FOLLOW(A)=Φ17.直接左递归的消除:P→Pα| ß转换结果P →ßP’P’→αP’| ε间接左递归:A→Bc | dB→aA | Ab转换结果:A→aAc | Abc| dA→aAcA’| dA’A’→bcA’| ε18.首符号集:①. 若x∈VT,则FIRST(x)={x};②.若x∈VN,且有产生式x →a…,则把a加到FIRST(x)中;若x →ε也是一条产生式,则把ε也加到FIRST(x)中③-1.若X →Y…是一个产生式且Y∈VN,则把FIRST(Y)中的所有非ε元素都加到FIRST(x)③-2. 若X →Y1Y2Y3…YK是一个产生式,Y1Y2Y3…Y i-1都是非终结符,而且对于任何j,1≤j≤i-1, FIRST(Yj)都含有ε,则把FIRST(Yj)中的所有非ε元素都加到FIRST(x)中。

特别地,若所有的FIRST(Yj)均含有ε,则把ε加到FIRST(X)中。

素短语:某文法的句型它至少包含有一个终结符号,并且除它之外,不再包含任何更小的素短语。

活前缀是指规范句型的一个前缀,这种前缀不含句柄之后的任何符号19.后继符号集①.对于文法的开始符号S,置# 于FOLLOW(S)中②.FOLLOW(U)={a | S->…Ua…,a VT}③.若A→α B ß是一个产生式,则把FIRST(ß)中的非ε加到FOLLOW(B)中④.若A→α B 是一个产生式,或A→α B ß是一个产生式而且ß ε,则把FOLLOW(A)加到FOLLOW(B)中。

20.预测分析程序是一种自顶向下分析程序,预测分析要求文法是LL(1)文法,它由分析栈、分析表和分析程序三部分组成,其中分析表的构成与文法有关。

21.自下而上分析方法是从输入符号串开始,查找当前句柄,并用产生式将它归约成相应的非终结符号,最后归约为开始符号的一种分析方法22.有一个文法G,如果G中没有形如:U …VW…的产生式,即它的任意产生式的右部都不含两个相继(并列)的非终结符,则称G为算符文法。

或称为OG文法。

设有一个不含空产生式的算符文法,如果在任意两个终结符号之间,至多只有一种优先关系成立,则称这样的算符文法为算符优先文法即OPG文法23.E->E+T得LASTVT(E)> +,+<FIRSTVT(T)24.LR分析法是一种有效的自底向上的语法分析技术,25.它能适用于大部分上下文无关文法的分析,一般叫LR(k)分析方法LR方法的基本思想是:在规范归约过程中,一方面记住以移进和归约出的整个符号串,即记住“历史”,另一方面根据所用的产生式推测未来可能碰到的输入符号,即对于未来进行“展望”。

当一串貌似句柄的符号串呈现分析栈的顶端时,根据所记载的“历史”和“展望”以及“现实”的输入符号等三方面的材料,来确定栈顶的符号串是否构成相对某一产生式的句柄。

分析表是LR分析器的核心,它跟文法有关,它包括动作表(Action)和状态转换表(Goto)两部分,总控程序据分析表确定分析动作。

26.语法制导翻译:对文法中的每个产生式都附加一个语义动作或语义子程序,且在语法分析过程中,每当需要使用一个产生式进行推导或归约时,语法分析程序除执行相应的语法分析动作之外,还要执行相应地语义动作或语义子程序。

语法制导翻译的实质:根据文法中每个产生式所蕴含的语义,为其配备一个(或多个)语句或子程序,对所要完成的功能进行描述,在语法分析过程中,当分析器使用该产生式进行语法分析时(不论是推导还是归约),除完成语法分析动作之外,还将调用为其配备的语义子程序,进行相应地语义处理,完成语义翻译工作。

27..中间代码也叫中间语言:是源程序的一种内部表示,不依赖目标机的结构,易于机械生成 目标代码的中间表示。

常见的几种形式:① 后缀式② 图表示法(抽象语法树、DAG 图)③ 三地址代码(三元式、四元式、间接三元式)28.符号表的三种构造法和处理法:线性查找、二叉树、杂凑技术。

线性查找:平均查找次数:n/2二叉树:平均查找次数:1+log2(n )29.杂凑技术:假定有一个足够大的区域,这个区域用来填写一张含N 项的符号表。

构造一个地址函数 H ,对任何名字,H 函数的取值在0至N-1之间。

即不论对此项查表或填表,都能从H 函 数中获得它在表中的位置。

30.一个可执行程序所使用的存储空间被分为四个个区:代码区、数据区、栈区、堆区31.过程的每一次运行(或执行)被称为一次活动32.过程的活动生存期是指从该过程体第一步操作到最后一步操作之间的操作序。

两个过程 的活动生存期或嵌套或不重叠。

33.静态链:它指向直接外层过程的活动记录的起始位置,用于访问各外层的变量(非局部 变量)。

34.带有Display 的活动记录:老 SP 返回地址 参数个数 形式单元 简单变量 内情向量临时工作单元 TOP SP 静态链 内情向量临时工作单元 OP35.划分基本块的算法:①. 求出程序中可做基本块入口的语句,它们是:Ⅰ. 程序的第一条语句;Ⅱ. 能由条件转移语句或无条件转移语句转移到的语句;Ⅲ. 紧跟在条件转移语句后面的语句。

②. 对以上入口语句,构造其所属的基本块:此入口语句到下一条入口语句前,或下一条跳 转语句前,或一条停语句前的语句序列组成一个基本块。

③.删除未被纳入任何基本块的语句对基本块内的语句可以进行如下优化变换:合并已知量,交换语句位置,代数变换存储分配策略:静态存储分配:编译时对所有数据对象分配固定的存储单元(地址空间),运行时始终不变。

栈式动态存储分配:每个过程建立活动记录,运行时每当调用一个过程,Display老 SP 返回地址 参数个数 形式单元 简单变量 内情向量 临时工作单元TOPSP 全局Display就将活动记录动态的分配于栈顶,过程活动结束,则活动记录退出栈顶。

堆式动态存储分配:将存储空间组织成堆结构,以便用户可以随时申请或释放存储空间。

相关文档
最新文档