编译原理基础
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章引论
主要内容:编译原理的基本概念、定义、编译原理的应用发展和现状。
重点:编译程序工作的基本构成及各阶段的基本任务,
具体要求:理解什么是编译程序,了解各编译程序的基本构成及各阶段的基本任务,编译程序总框,了解编译程序生成过程和构造工具。
一、名词解释
1、编译程序:能够把用各种高级语言书写的源程序翻译成某种等价的目标程序的翻译程序。
2、遍:指编译程序对源程序或中间代码程序从头到尾扫描一次。
3、静态分配:在编译时就能够安排好目标程序运行时的全部数据空间。
二、问答题
1、简述编译程序的结构?
答:编译程序包括词法分析、语法分析、中间代码生成、优化,目标代码产生五个阶段,上述各阶段中还要进行表格处理和出错处理的工作。
2、编译程序可分成哪几个阶段?它们之间的关系如何?
答:编译程序可分为五个阶段:词法分析、语法分析、中间代码生成、优化、目标代码生成。
上述五个阶段之间每个阶段输出为作下一阶段的输入,第一阶段的输入是源程序,最后阶段的输出是目标代码程序。
注意:编译过程中,阶段的划分和遍的划分不一定相同
第二章高级程序语言概述
主要内容:程序语言定义、初等数据类型、数据结构、表达式、语句、高级语言的一般特征及程序语言的语法描述。
重点:程序语言定义
具体要求:理解程序语言的词法、语法和语义等概念;熟悉高级程序语言的一般结构和主要共同特征。
一、填空题
1、程序语言是由(语法)和(语义)两方面定义的。
2、一个名字的属性包括(类型)和(作用域)
3、目标代码一般有三种形式:能够立即执行的机器语言代码,(待装配的机器语言模块)和(汇编语言代码)
4、语义:定义一个程序的意义的(一组规则)
5、2型文法又称为(上下文无关文法),3型文法又为(正规文法)
二、是非题
1、虽然名字都是用标识符表示的,但名字和标识符有着本质的区别(对)
2、各种名字都是用标识符表示的,所以名字和标识没有本质的区别(错)
3、数组元素的地址计算与数组的存储方式没有关系(错)
4、语法是指程序的含义(错)
5、因名字都是用标识符表示的,故名字与标识符没有区别(错)
第三章词法分析
主要内容:词法分析器的任务、词法分析器的设计、正规表达式与有限自动机、词法分析器的自动生成。
重点:词法分析器的任务,词法分析器设计,正规表达式与有限自动机,词法分析器自动生成,状态转换图
具体要求:理解词法分析器的功能及输出形式;熟练掌握词法词法分析器的设计的原理,掌握运用状态转换图进行词法分析器设计。
一、是非题
1、一个状态转换图可以用于识别一定的字符串。
(对)
二、填空题
1、词法分析器的任务是从(源程序)中识别出一个个(单词符号)。
2、词法分析器的任务是(输入)源程序、(输出)单词符号。
3、执行词法分析的程序称为(词法分析器)或(扫描器)。
4、词法分析器所输出的单词符号常常表示成如下二元关系:(单词种别,单词自身值)。
5、一张转换图只包含有限个状态,其中有一个被认为是(初态),而且实际上至少要有一个(终态)。
6、程序语言的单词符号包括:(标识符)、(运算符)、(常数)、(基本字)、界符等。
7、一张转换图只包含有限个状态,其中有一个被认为是(初)态,而且是实际上至少要有一个(终)态。
三.名词解释
1、词法分析器:是一种程序,它能将字符串形式的源程序改造成单词符号串形式的中间程序。
2、超前搜索:在词法分析过程中,有时为了确定词性,需要超前扫描若干个字符,这个动作为超前搜索。
四、简答题
1、何谓状态转换图?作用是什么?
答:状态转换图是一张有限方向图,其中结点代表状态,状态之间用箭弧连接,箭弧上的标记代表在射出结点状态下可能出现的输入字符或字符类,状态中有一个初态,至少有一个终态。
第四章 语法分析--自上而下分析
主要内容:上下文无关文法,语法分析器的功能、自上而下分析所面临的问题、LL (1)分析法、递归下降分析的构造过程、预测分析程序等内容。
重 点:上下文无关文法,递归下降子程序预测分析表构造,LL (1)方法。
具体要求:正确理解上下文无关方法基本概念,包括:文法的定义、缩写、句型、句子、语言、语法树、二义性等;正确理解自上而下分析的基本思想;熟练掌握递归下降分析基本方法;消除左递归、消除回溯,构造递归下降子程序;掌握预测分析程序的基本原理的预测分析构造;理解LL (1)方法的定义,LL (1)文法的条件及其判别,计算first 集和follow 集。
一、是非题:
1、使用自上而下分析法,首先必须消去文法的左递归。
(对)
2、文法是描述语言语义的形式规则。
(错)
3、一个文法是二义的,则这个文法的每个句子都对应两棵不同的语法树。
(错)
4、一个上下文无关文法的产生式的左部符号可以是非终结符也可以是终结符。
(错)
5、递归下降分析法是一种自下而上的分析法。
(错)
6、一个上下文无关文法的开始符号是一个特殊的非终结符。
(对)
7、一个句型的推导可表示在一棵语法树。
(对)
8、一个文法G ,若它的分析表M 不含多重定义入口,则G 是LL (1)文法。
(对)
9、文法的二义性与语言的二义性是两个相同的概念。
(错)
10、对于任何一个含有左递归的文法必存在一个等价的不含左递归的文法。
(对)
11、一个文法的句子也一定是该文法的句型。
(对)
12、如果一个文法存在某个句子对应两棵不同的语法树,则该文法是二义的。
(对)
13、一个上下文无关文法的开始符号可以是终结符和非终结符。
(错)
14、已经证明文法的二义性是可判定的。
(错)
二、填空题
1、假定G 是一个文法,S 是它的开始符号,如果α*
⇒S , 则称α是一个(句型),仅包含终结符号的句型是一个(句子)。
2、常用的语法分析方法有(自下而上分析法)或(算符优先分析法),(自上而下分析法)或(递归下降法)等。
3、一个上下文无关文法包括四个组成部分是(一组终结符号,一组非终结符号,一个开始符号,一组产生式)。
4、一个文法G ,若它的分析表M 不含多重定义入口则(G 是LL (1)文法)。
5、每个文法G 的程序语言都包含(语法)和(语义)两方面定义的。
6、一个文法,如果存在非终结符P ,P →Pa ,则称这个文法含有(左递归)。
7、一般程序语言的语法单位有:(表达式)、(语句)、(过程)、(程序)等等。
8、所谓最右推导是指:(任何一步α=>β都是对α中最右非终结符号进行替换的)。
9、语法分析的任务是(分析一个文法的句子结构)。
10、假定S 是文法G 的开始符号,对于G 的任何非终结符A ,定义集合
FOLLOW (A )=({a|......*
Aa S ⇒..,a ∈U T })。
11、预测分析程序是使用一张(分析表)和一个(符号栈)进行联合控制的。
12、如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是(二义的)。
13、文法G 所产生的句子的全体是(语言),将它记为L (G )。
14、文法是描述语言的(语法结构)的形式规则。
15、产生式的用于定义(语法范畴)的一种书写规则。
16、所谓最左推导是指(任何一步α=>β都是对α中的最左非终结符进行替换的)。
17、语法分析的方法大致可分为两类,一类是(自上而下)分析法,另一类是(自下而上的)分析法。
18、如果a 1=>a 2=>…=>a n ,则我们称这个序列是(从a 1到a n 的一个推导)。
19、语法规则是(语法单位)形成规则,词法规则的(单词符号)形成规则。
20、最右推导亦为(规范推导),由此推得的句型称为(规范)句型。
三、名词解释:
1、文法:描述语言的的语法结构的形式规则。
2、句型:设G 是一个文法,S 是它的开始符号,若α*
⇒S ,则α称为一个句型。
3、二义性文法:若文法存在某个句子对应两棵不同的语法树(或两种不同的推导)。
4、最左推导:推导的任何一步α=>β都是对α中最左非终结符进行替换。
5、语法分析:按文法的产生式识别输入的符号串是否为一个句子的分析过程。
6、规范推导:最右推导称为规范推导。
7、语法:是一组规则,用它可以形成和产生一个合式的程式。
8、产生式:是定义语法范畴一种书写规则,其形式是A →α,其中:A 是非终结符,α是终结符或非终结符组成的串。
9、规范句型:由规范推导所得的句型。
10、语法树:用一张图表示一个句型的推导的表示方法。
第五章 语法分析—自下而上分析
主要内容:上下文无关文法,自下而上分析的基本问题、算符优先分析、LR 分析法。
重 点:上下文无关文法,算符优先分析基本方法、算符优先表和归约。
具体要求:正确理解上下文无关方法基本概念,正确理解自下而上分析的基本思想;以及归约、短语、句柄、分析树等概念;掌握自下而上语法分析(算符优先分析法),算符优先分析基本方法、算符优先表和算符优先函数构造技术,LR 分析器,LR(0)项目集族和LR(0)分析表的构造,SLR 分析表的构造,规范LR 分析表的构造,出错处理概述,词法分析阶段的错误诊察,语法分析(自下而上)阶段的错误诊察。
一、判断题
1、最左归约是最右推导的逆过程。
(TURE )
2、一个优先表一定存在相应的优先函数。
(FALSE )
3、算符优先分析法是一种自上而下的分析法。
(FALSE )
4、优先关系表所对应的优先函数,如果存在,则一定唯一。
(FALSE )
5、一个句型的直接短语是唯一的。
(FALSE )
二、填空题
1、如果一个文法的任何产生式的右部都不含有两个相继(并列)的非终结符,则这种文法称为(算符)文法。
2、一个句型的最左直接短语称为该句型的(句柄)。
三、名词解释
1、句柄:一个句型的最左直接短语称为句型的句柄。
2、对于文法G 和每个非终结符P ,定义集合
FIRSTVT (P )=({a|P=>a …或P=>Qa …,a ∈V T 而 Q ∈V N })
3、短语:令G 是一个文法,S 是文法的开始符号,假定αβδ是文法G 的一个句型。
如果
有:δαA *
S ⇒,且β+
⇒A ,则称β是句型αβδ相对非终结符A 的短语。
4、素短语:素短语是指这样一个短语,它至少含有一个终结符,并且除它自身之外不再含任何更小的素短语。
5、算符优先文法:如果一个算符文法G 中任何终结符对,(a,b )至多只满足下述三关系之一:a ·b ,a<·b ,a ·>b 则称G 是一个算符优先文法。
6、语法树:用一张图表示一个句型的推导之表示方法。
第七章 语法制导翻译和中间代码生成
主要内容:语法制导翻译概述,各种常见的中间语言形式,中间语言,说明语句,赋值语句的翻译,布尔表达式的翻译,控制语句到四元式的翻译,自上而下分析制导翻译概述。
重 点:语法制导翻译基本思想,三种中间语言,四元式,逆波兰表示,算术表达式,算术表达式的翻译,布尔表达式的翻译,控制语句的翻译。
具体要求:正确理解语法制导翻译基本原理;熟悉常见的几种中间语言。
四元式、三元式,逆波兰表示;掌握各种语句到四元式的翻译方法,包括:简单算术表达式,布尔表达式,控制语句,数组引用,过程调用等。
一、是非题
1、数组元素的地址计算和数组的存贮方式无关。
(错)
2、逆波兰式表示的表达式亦称后缀式。
(对)
二、填空
1、表达式a+b*(d-c )的逆波兰表示为(abdc-*+)。
2、语法分析是根据语言的(语法规则)进行的,中间代码产生是根据语言的(语义规则)进行的。
3、表达式a-(b+c )/d 的逆波兰表示为 (abc+d/-)。
4、逆波兰式abc*d+/ 所表示的表达式为 (a/(b*c+d ))。
5、逆波兰式ab+cd+* 所表示的表达式为 ((a+b )*(c-d ))。
6、表达式(a+b )/(c+d )的逆波兰表示为 (ab+cd+/)。
7、表达式a/(b*c+d)的逆波兰表式为(abc*d+/)。
8、表达式a*(b+c)/(d-e)的逆波兰表示为(abc+*de-/)。
9、表达式a+b*(d-c)的逆波兰表示为(abdc-*+)
10、逆波兰式abc+d/- 所表示的表达式为(a-(b+c)/d)。
11、常见的中间语言有(三元式,四元式,逆波兰式,树形表示)等等。
12、表达式(a-b*c)/d 的逆波兰表示为( abc*-d/)。
三、名词解释:
1、逆波兰表示:逆波兰表示法是一种表示表达式的方式,这种表示法是:把运算量(操作数)写在前面,把算符写在后面(后缀)。
2、后缀式:是一种把运算量写在前面,把算符号写在后面的表示式的方法。
3、语言的语义:它是一组规则,用它可以定义一个程序的意义。
4、语义:定义一个程序的意义的一组规则。
5、语法制导翻译:在语法分析过程中,随着分析的步步进展,根据每个产生式所对应的语义对程序进行翻译的办法。
第八章符号表
主要内容:符号表的组织和使用,整理与查找,名字的作用范围,符号表的内容。
重点:符号表的作用与内容。
具体要求:理解符号表的作用及符号表的组织和使用方法,作用域信息的保存,整理与查找,了解名字的作用范围,符号表的内容等。
一、填空
1、编译过程中,常见的构造和查填符号表的方法有(线性查找),(对折查找与二叉树)各(杂凑技术)。
2、一张符号表的每一项包含两大栏,即(名字栏)和(信息栏)。
3、符号表的信息栏中登记了每个名字的有关性质,如(类型,种属,所占单元大小,相对地址)等。
4、符号表的整理和查找技术通常有(线性查找二叉树杂凑技术)等等。
二、论述题
1、符号表有哪几种整理与查找方法?它们的效率及构造难易程度如何?
答:符号表的整理与查找方法有三种:线性查找、二叉树和杂凑技术。
线性查找最简单,但效率低;二叉树的查找效率高一些,然而实现上较困难一点;杂凑技术效率高,可实现上比较复杂,而且要消耗一些额外的存储空间。
2、对符号表的操作包括哪些方面?
答:对给定名字,确定此名是否在表中,填入新名,对给定名字,访问它的有关信息,对给定名字,填写或更新它的某些信息;删除一个或一组无用的项。
第九章运行对存储空间组织
一、是非题
1、栈式存贮分配适合于解决过程和函数的递归调用。
(对)
2、静态存贮分配策略适用于fortran 类语言。
(对)
3、每个过程的display表的体积在编译时就可确定。
(对)
4、每个过程的活动记录的体积在编译时可静态确定。
(对)
二、填空
1、对于数据空间的存贮分配,fortran采用(静态存贮分配)策略,pascal采用(动态存贮分配)策略。
2、常用的两种动态存储分配办法是(栈式)动态分配和(堆式)动太分配。
3、对不同的语言,采取的存储分配策略也可能不同;如:(fortran)语言采用静态分配策略。
(pascal)语言采用动态分配策略。
4、如果在编绎时能够确定一个程序在运行时所需的全部数据空间的大小,则可采用(静态)存储分配策略,如果在编绎时不能确定程序在运行时所需数据空间的大小,则必须采用(动态)存储分配策略。
5、数据存贮空间的分配策略一般分为(静态分配)和(动态分配)两大类。
6、存储分配策略分为(静态)分配策略和(动态)分配策略两种。
三、名词解释
1、动态存贮分配:程序运行时动态地确定所需数据空间的大小。
2、静态存贮分配:编绎时完全确定目标程序运行时的全部数据空间。
3、活动记录:一个过程在运行时所需数据空间中,编译时可确定体积的部分称该过程的活动记录。
4、Display表:过程的嵌套层次显示表,记录该过程的各外层过程最新活动记录的起始地址。
四、论述题
1、简要描述嵌套过程语言的活动记录所包含的项目,一个过程的活动记录:
2、简述嵌套过和语言在存贮分配时为何要引进display表。
答:程序运行时,一个过程Q可能引用它的外层过程P的最新活动记录中的某些数据,故Q运行时必须知道它的所有外层过程的最新活动记录的地址,因此,必须设法跟踪每个外层过程的最新活动记录的位置,层次显示表(display表)就是用于登记每个外层的最新活动记录位置的表。
3、一个过程的活动记录一般包括哪些项目?
答:应包含下面三方面内容:
(1)连接数据。
(2)形式单元。
(3)局部变量和临时单元
4、在进行地址分配时,是不是一定要对每个临时变量分配一个不同的存贮单元?临时变量地址分配的一般原则是什么?
答:不是。
如果两个临时变量的作用域不相交,则它们可分配在同一单元中。
5、试问:对pascal语言采用何种存贮分配策略?为什么?
答:动态分配策略。
因为pascal是嵌套过程语言,允许过程递归和允许自由申请与退还数据空间。
6、一个fortran程序段局部数据区一般包含哪些内容?
答:临时变量,数组,简单变量,形式单元,寄存器保护区,返回地址。
第十章优化
主要内容:优化概述,局部优化,基本块的DAG表示及其应用。
控制流分析和循环查找算法,到达定值与引用定值链,循环优化。
重点:局部优化,DAG的构造和应用,控制流分析和循环查找算法,到达定值与引用定值链,循环优化。
具体要求:正确理解代码优化的定义以及各种可能的优化的概念,掌握用DAG表示进行局部优化的方法。
掌握对各类优化的理解,包括常量合并、公共子表达式删除、复写传播、死代码删除、循环优化(代码外提、归纳变量删除、强度削弱)等。
掌握建立程序流图的算法和流图中自然循环的识别算法。
一、是非题
1、一个基本块的进口和出口可以不唯一。
(错)
2、每个基本块可用一个DAG表示。
(对)
3、仅考虑一个基本块,不能确定一个赋值是否真是无用。
(对)
4、每个基本块只有一个入口和一个出口。
(对)
5、孤立地考虑一个基本块常常不能确定一个赋值是否真是无用的。
(对)
二、填空题
1、在一个基本块内,通常可实行三种优化:(合并己知量)、(删除无用赋值)、和(删除多余运算)。
2、如果在一个基本块中,四元式i对A定值,四元式j要引用A值,而从i到j之间没有A的其它定值,则称j是i的变量A的(待用信息)。
3、局限于基本块范围内的优化称为(局部优化)。
4、局部优化是指(局限于基本块范围内)的一种优化。
5、所谓优化是指(对程序进行各种等价变换,使得从变换后的程序出发,能生成更有效的目标代码)。
6、根据优化所涉及的程序范围优化可分为(局部)优化,(循环)优化各全局优化三个不同的级别。
第十一章目标代码生成
主要内容:目标机器模型,一个简单代码生成器,寄存器分配,DAG目标代码,窥孔优化等内容。
重点:目标机器模型,一个简单代码生成器,寄存器分配,DAG目标代码,窥孔优化。
具体要求:正确理解代码生成器设计中的主要问题:存储管理、计算次序的选择、寄存器的分配、指令的选择等,掌握一些简单的代码生成算法。
一、填空题
1、代码生成要着重考虑的两个问题是(使目标代码较短)和(充分利用寄存器)
2、每条指令的执行代价定义为:(指令访问主存单元次数+1)
二、名词解释题
1、指令的执行代价:每条指令访问主存单元次数+1
三、讨论题
1、目标代码一般有哪几种形式:生成目标代码时要着重考虑的问题是什么?
答:目标代码生成一般有三种形式:机器语言代码,待装配的机器语言模块,汇编语言代码。
生成目标代码时要着重考虑两个问题:如何使生成的目标代码较短;如何充分利用计算机的寄存器,减少目标代码中访问存储单元的次数。