最新编译原理期末考试试卷及答案
- 格式:doc
- 大小:139.50 KB
- 文档页数:15
编译原理期末考试试题及答案一、选择题(每题2分,共20分)1. 编译器的前端主要负责以下哪项工作?A. 代码优化B. 目标代码生成C. 词法分析和语法分析D. 运行时支持2. 词法分析器的主要任务是什么?A. 识别语法结构B. 识别词法单元C. 构建语法树D. 代码优化3. 语法分析中,使用哪种方法可以避免回溯?A. 递归下降分析B. LR分析C. LL分析D. 自顶向下分析4. 下列哪个选项不是中间代码的形式?A. 三地址代码B. 四元组C. 抽象语法树D. 汇编语言5. 代码优化的目标不包括以下哪项?A. 提高代码执行速度B. 减少程序占用的内存C. 增加程序的可读性D. 减少程序的执行时间二、简答题(每题10分,共30分)1. 简述编译器的主要组成部分及其功能。
2. 解释什么是语法制导翻译,并举例说明其在编译过程中的应用。
3. 描述静态作用域规则和动态作用域规则的区别。
三、计算题(每题15分,共30分)1. 给定一个简单的算术表达式 `3 + (4 * 5) - 2`,请使用逆波兰表示法表示,并说明其转换过程。
2. 假设有一个简单的文法如下:```S -> A BA -> a A | εB -> b B | ε```请写出使用该文法生成字符串 "ab" 的所有派生树。
四、论述题(每题20分,共20分)1. 论述编译器中代码优化的重要性,并举例说明常见的优化技术。
参考答案一、选择题1. C2. B3. B4. D5. C二、简答题1. 编译器的主要组成部分包括前端、中端和后端。
前端负责词法分析和语法分析,中端进行语义分析和中间代码生成,后端则负责代码优化和目标代码生成。
2. 语法制导翻译是一种基于文法规则的翻译技术,它将源程序的语法结构映射到相应的语义操作上。
例如,在编译过程中,语法制导翻译可以用于将源代码中的条件语句转换为中间代码中的跳转指令。
3. 静态作用域规则是指变量的作用域在编译时确定,而动态作用域规则是指变量的作用域在运行时确定。
一. 填空题(每空2分,共20分)1. 不同的编译程序关于数据空间的存储分配策略可能不同,但大部分编译中采用的方案有两种:静态存储分配方案和动态存储分配方案,而后者又分为(1) 和 (2) 。
2. 规范规约是最(3)规约。
3. 编译程序的工作过程一般划分为5个阶段:词法分析、(4) 、语义分析与中间代码生成,代码优化及(5) 。
另外还有(6)和出错处理。
4.表达式x+y*z/(a+b)的后缀式为 (7) 。
5.文法符号的属性有综合属性和 (8)。
6.假设二位数组按行存放,而且每个元素占用一个存储单元,则数组a[1..15,1..20]某个元素a[i ,j]的地址计算公式为(9)。
7.局部优化是局限于一个(10)范围内的一种优化。
二. 选择题(1-6为单选题,7-8为多选题,每问2分,共20分)1. 一个上下文无关文法G 包括四个组成部分:一组终结符,一组非终结符,一个( ),以及一组( )。
A . 字符串B . 产生式C . 开始符号D . 文法 2.程序的基本块是指( )。
A . 一个子程序B . 一个仅有一个入口和一个出口的语句C . 一个没有嵌套的程序段D . 一组顺序执行的程序段,仅有一个入口和一个出口 3. 高级语言编译程序常用的语法分析方法中,递归下降分析法属于( )分析方法。
A . 自左向右 B . 自顶向下 C . 自底向上 D . 自右向左 4.在通常的语法分析方法中,( )特别适用于表达式的分析。
A . 算符优先分析法 B . LR 分析法 C . 递归下降分析法 D . LL (1)分析法 5.经过编译所得到的目标程序是( )。
A . 四元式序列B . 间接三元式序列C . 二元式序列D . 机器语言程序或汇编语言程序 6. 一个文法所描述的语言是( );描述一个语言的文法是( )。
A . 唯一的 B . 不唯一的 C . 可能唯一,也可能不唯一7.如果在文法G中存在一个句子,当其满足下列条件()之一时,则称该文法是二义文法。
期末考试试卷(A)卷一、填空题(每小题2分,共20分)1、字母表∑,用∑*表示∑上所有有穷长的串集合,∑*称为∑的①。
2、设z=abc,则z的固有头是①。
3、如何由语言基本符号组成程序中各个语法成分(包括程序)的一组规则叫①。
4、设∑={a,b},∑上的正规式(a|b)(a|b) 相应的正规集为①5、NFA的映象f是从"状态×字"映射到"状态子集",f为①值函数。
6、LR分析是按规范句型的①为可归约串。
7、结点的①属性值由该结点的兄弟结点和父结点的属性值计算。
8、如果分析树中一结点的属性b依赖于属性c,那么这个结点的属性b的语义规则的计算必须在定义属性c的语义规则的计算①。
9、对于栈式符号表,引入一个显示嵌套层次关系表- ①表,该表总是指向当前正在处理的最内层的过程的子符号表在栈符号表中的起始位置。
10、任一有向边序列n1 → n2,n2 → n3,…,nk-1 → nk为从结点n1到结点nk的一条通路。
如果n1=nk,则称该通路为①。
二、单项选择(每小题2分,共14分)1、乔姆斯基把文法分成4种类型,即0型、1型、2型和3型。
其中3型文法也称为()。
A.上下无关文法 B.正规文法C.上下文有关文法 D.无限制文法2、生成非0开头的正偶数集的文法是()。
A. Z::=ABC B. Z::=ABCC::=0|2|4|6|8 C::=0|2|4|6|8B::=BA|B0|ε B::=BA|B0|0A::=1|2|3|…|9 A::=1|2|3|…|9C. Z::=ABC|2|4|6|8D. Z::=ABC|2|4|6|8C::=0|2|4|6|8 C::=0|2|4|6|8B::=BA|B0|0 B::=BA|B0|εA::=1|2|3|…|9 A::=1|2|3|…|93、简单优先分析法从左到右扫描输入串,当栈顶出现()时进归约。
A.素短语B.直接短语C.句柄D.最左素短语4、同心集合并有可能产生新的()冲突。
一、挖空题(每空2分,共20分)之阳早格格创做1.编译步调最先要辨别出源步调中每个单词汇,而后再分解每个句子并翻译其意思.2.编译器时常使用的语法分解要领有自底进与战自顶背下二种.3.常常把编译历程分为分解前端与概括后端二大阶段.词汇法、语法战语义分解是对付源步调的分解,中间代码死成、代码劣化与目标代码的死成则是对付源步调的概括.4.步调安排谈话的死长戴去了日渐多变的运止时保存管制规划,主要分为二大类,即固态保存调配规划战动背保存调配规划.5.对付编译步调而止,输进数据是源步调,输出截止是目标步调.1.估计机真止用下档谈话编写的步调主要有二种道路:阐明战编译.2.扫描器是词汇法分解器,它担当输进的源步调,对付源步调举止词汇法分解并辨别出一个个单词汇标记,其输出截止是单词汇标记,供语法分解器使用. 3.自下而上分解法采与移进、归约、过失处理、担当等四种支配.4.一个LL(1)分解步调需要用到一弛分解表战标记栈.5.后缀式abc-/所代表的表白式是a/(b-c).二、单项采用题(每小题2分,共20分)1.词汇法分解器的输出截止是__C.A.单词汇的种别编码B.单词汇正在标记表中的位子C.单词汇的种别编码战自己值D.单词汇自己值2.正规式 M 1 战 M 2 等价是指__C_.A. M1战M2的状态数相等 B. M1战M2的有背边条数相等C.M1战M2所识别的谈话集相等D.M1战M2状态数战有背边条数相等3.文法G:S→xSx|y所识别的谈话是_C____.A. xyx B. (xyx)* C.xnyxn(n≥0) D. x*yx*4.如果文法G是无二义的,则它的所有句子α_A____.A.最左推导战最左推导对付应的语法树肯定相共B.最左推导战最左推导对付应的语法树大概分歧C.最左推导战最左推导肯定相共D.大概存留二个分歧的最左推导,但是它们对付应的语法树相共5.构制编译步调应掌握____D__.A.源步调B.目心号止 C.编译要领 D.以上三项皆是6.四元式之间的通联是通过__B___真止的.A.指示器B.临时变量C.标记表 D.步调变量7.表白式(┐A∨B)∧(C∨D)的顺波兰表示为__B___.A.┐AB∨∧CD∨B.A┐B∨CD∨∧ C.AB∨┐CD∨∧ D.A┐B∨∧CD∨8. 劣化可死成__D___的目标代码.A.运止时间较短 B.占用保存空间较小C.运止时间短但是占用内存空间大 D.运止时间短且占用保存空间小9.下列___C___劣化要领没有是针对付循环劣化举止的.A. 强度削强B.简略归纳变量C.简略多余运算D.代码中提10.编译步调使用_B_辨别标记符的效用域.A. 道明标记符的历程大概函数名B.道明标记符的历程大概函数的固态条理C.道明标记符的历程大概函数的动背条理 D. 标记符的止号三、推断题(对付的挨√,错的挨×,每小题1分,共10分)2.一个有限状态自效果中,有且仅有一个唯一的末态.x3.一个算符劣先文法的每个非末结标记间皆也大概存留劣先闭系.X4.语法分解时必须先与消文法中的左递归 .X6.顺波兰表示法表示表白式时无须使用括号.R9.二个正规集相等的需要条件是他们对付应的正规式等价. X1.编译步调是对付下档谈话步调的编译真止.X2.一个有限状态自效果中,有且仅有一个唯一的初初态.R3.一个算符劣先文法的每个非末结标记间皆没有存留劣先闭系.R4.LL(1)语法分解时必须先与消文法中的左递归 . R5.LR分解法正在自左至左扫描输进串时便能创制过失,但是没有克没有及准确天指出堕落天面. R6.顺波兰表示法表示表白式时根据表白式会使用括号. X7.固态数组的保存空间不妨正在编译时决定.X8.举止代码劣化时应着沉思量循环的代码劣化,那对付普及目标代码的效用将起更大效用.X9.二个正规集相等的需要条件是他们爆收的标记串是相共的. R10.一个语义子步调形貌了一个文法所对付应的翻译处事. X1.什么是S-属性文法?什么是L-属性文法?它们之间有什么闭系?S-属性文法是只含有概括属性的属性文法. (2分)L-属性文法央供对付于每个爆收式A X1X2…Xn,其每个语义准则中的每个属性大概者是概括属性,大概者是Xj的一个继启属性,且该属性仅依好于:(1)爆收式Xj的左边标记X1,X2…Xj-1的属性;(2)A的继启属性. (2分)S-属性文法是L-属性文法的惯例.(1分)2.什么是LL(1)分解器2.什么是LR(0)分解器所谓LR(0)分解,是指从左至左扫描战自底进与的语法分解,且正在分解的每一步,只须根据分解栈目前已移进战归约出的局部文法标记,并至多再背前查看0个输进标记,便能决定相对付于某一爆收式左部标记的句柄是可已正在分解栈的顶部产死,进而也便不妨决定目前所应采与的分解动做(是移进仍旧按某一爆收式举止归约等).五、概括题(共40分)1.(10分)对付于文法 G[S] :S → 1A | 0B | ε A → 0S | 1AA B → 1S | 0BB⑴ (3 分 ) 请写出三个闭于 G[S] 的句子;⑵ (4 分 ) 标记串 11A0S 是可为 G [S] 的句型?试道明您的论断.⑶ (3 分 ) 试绘出 001B 闭于 G [S] 的语法树.问:(1)三个 0 战 1 数量相等的串(每个1分)(2) S => 1A => 11AA => 11A 0S(3)2.(10分)设有谈话 L={ α | α∈ {0,1} + ,且α没有以 0 启头,但是以 00 末端 } .3分)试写出形貌 L 的正规表白式;⑵(7分)构制辨别 L 的 DFA (央供给出仔细历程,并绘出构制历程中的NFA 、 DFA 的状态变更图,以及最小DFA的状态变更图 ) .问:( 1 )(3分)正规表白式: 1(0|1) * 00( 2 )(7分)第一步(3分):将正规表白式变更为 NFA第二步(2分):将 NFA 决定化为 DFA :(1分)状态输进I 0 I 1 t 0 1[S] —[A,D,B] q 0 —q 1[A,D,B] [D,B,C] [D,B] q 1 q 2 q 3[D,B,C] [D,B,C,Z] [D,B] q 2 q 4 q 3[D,B] [D,B,C] [D,B] q 3 q 2 q 3[D,B,C,Z] [D,B,C,Z] [D,B] q 4 q 4 q 3DFA 的状态变更图(1分)第三步(2分):将DFA 最小化:(1分)将状态区分末态与非末态二个集中:A={q0,q1,q2,q3},E={q4}根据A、E集中的情况,对付A集中举止区分状态输进I 0 I 1q0—Aq1AAq2EAq3AA将状态集A区分为二个集中:A={q0,q1,q3},B={2}根据A、B集中的情况,对付A集中举止区分状态输进I 0 I 1q0—Aq1BAq3BA将状态集A区分为二个集中:A={q0},C={q1,q3}根据A、C集中的情况,对付C集中举止区分状态输进I 0 I 1q1BAq3BA最小DFA 的状态变更图(1分)3.(20分)给定文法 G[E] :E → E+T | TT → T*F | FF → (E) | i该文法是 LL(1) 文法吗?(央供给出仔细历程,如果是LL(1),给出分解表)问:(1)该文法没有是LL(1)文法,果为有左递归,与消左递归可赢得一个LL(1)文法(2分)(2)与消左递归,得新文法 (3分)E → TE’E’→ +TE’| εT → FT’T’→ *FT’ |εF → (E) | i(3)供爆收式左部的First集 (2.5分)First(TE’) = First(T)= First(F)={(,i}First(+TE’) = {+}First(FT’) = First(F)={(,i}First(*FT’) = {*}First((E)) = {(}First(i) = {i}(4)供所有非末结符的Follow集(2.5分)Follow(E) = {$,)}Follow(E’) = Follow(E) = {$,)}Follow(T) = First(E’)∪Follow(E)={+} ∪{$,)}={$,+,)} Follow(T’) = Follow(T) ={$,*,)}Follow(F) = First(T’)∪Follow(T)∪Follow(T’)= {$,*,)} (5)供所有爆收式的Select集 (2.5分)Select(E → TE’)=First(TE’)= {(,i}Select(E’→ +TE’)=First(+TE’)= {+}Select(E’→ε)= Follow(E’) = {$,)}Select(T → FT’)=First(FT’)= {(,i}Select(T’→ *FT’)=First(*FT’)= {*}Select (T ’→ε)= Follow(T ’) ={$,+,)} Select (F → (E))=First((E))= {(} Select (F → i )=First(i)= {i}(6)对付相共左部的所有Select 即供接集(2.5分) Select (E ’→ +TE ’)∩Select (E ’→ε)=Φ Select (T ’→ *FT ’)∩Select (T ’→ε)=Φ Select (F → (E))∩Select (F → i )=Φ所以,变革后的文法是LL (1)文法,其分解表如下 (7) LL(1) 分解表( 5 分)V NV T+ * i ( )$E E → TE ’ E → TE ’ E ’ E ’→ +TE ’ E ’→ε E ’→εT T → FT ’ T → FT ’ T ’ T ’→ε T ’→ *FT ’ T ’→ε T ’→εF F → (E) F → i1.(10分)对付于文法G :SaSbS|aS|d道明该文法是二义性文法.问:一个文法,如果存留某个句子有没有只一棵语法分解树与之对付应,那么称那个文法是二义性文法.(5分)句子aadbd 有二棵语法树(5分,划一棵树给3分).如下图:(6分)(1) (2)由此可知,SaSbS|aS|d 定义的文法是二义性文法.3.(20分)给定一个简朴的算术表白式文法 G[E] : E → E+T | T T → T*F | F F → (E) | i该文法是 SLR(1) 文法吗?(央供给出仔细历程,如果是SLR 文法,给出分解表)dSSa bSSad SaSSabSdd问:(1) 该文法的拓广文法是: (2分)E’→E (1)E → E+T (2)E → T (3)T → T*F (4)T → F (5)F → (E) (6)F → i (7)(2)相映的LR(0)的DFA:(10分)(3)辩论与办理 (3分)① I1状态中有移进—规约辩论Follow(E’)={ $ } 没有含{ + }可办理移进—规约辩论② I2状态中有移进—规约辩论Follow(E)={ +,),$ } 没有含{ * }可办理移进—规约辩论③ I8状态中有移进—规约辩论Follow(E)={ +,),$ } 没有含{ * }可办理移进—规约辩论(4) SLR分解表 (5分)二、单项采用题(每小题2分,共20分)1.谈话是____C_A.末结符与非末结符的标记串的集中 B.非末结符标记串的集中 C.末结符标记串的集中 D.爆收式的集中2.编译步调分二阶段处事,前阶段完毕的处事是__C___A.词汇法分解、语法分解战代码劣化 B.代码死成、代码劣化战词汇法分解C.词汇法分解、语法分解、语义分解战中间代码死成D.词汇法分解、语法分解战代码劣化3.一个句型中称为句柄的是该句型的最左CA.句型 B.短语 C.间接短语 D.最左间接短语4.自效果识别的谈话是 DA.0型谈话 B.1型谈话 C.2型谈话 D.3型谈话5.自效果所完毕的任务是从字符串形式的源步调中辨别出一个个具备独力含意的最小语法单位即 BA.字符 B.单词汇 C.句子 D.句型6.对付应Chomsky四种文法的四种谈话之间的闭系是BA.L0L1L2L3 B.L3L2L1L0C.L3=L2L1L0 D.L0L1L2=L37.词汇法分解的任务是AA.辨别单词汇 B.分解句子的含意 C.辨别句子 D.死成目标代码8.时常使用的中间代码形式没有含DA.三元式 B.四元式 C.顺波兰式 D.语法树9.代码劣化的手段是CA.节省时间 B.节省空间 C.节省时间战空间 D.把编译步调举止等价接换10.代码死成阶段的主要任务是CA.把下档谈话翻译成汇编谈话 B.把下档谈话翻译成呆板谈话C.把中间代码变更成依好简曲呆板的目标代码D.把汇编谈话翻译成呆板谈话。
第 0 页共 16 页一.填空题(每空2分,共20分) 1. 不同的编译程序关于数据空间的存储分配策略可能不同,但大部分编译中采用的方案有两种:静态存储分配方案和动态存储分配方案,而后者又分为(1)和(2)。
2. 规范规约是最(3)规约。
3. 编译程序的工作过程一般划分为5个阶段:词法分析、(4)、语义分析与中间代码生成,代码优化及(5)。
另外还有(6)和出错处理。
4.表达式x+y*z/(a+b)的后缀式为(7)。
5.文法符号的属性有综合属性和(8)。
6.假设二位数组按行存放,而且每个元素占用一个存储单元,则数组a[1..15,1..20]某个元素a[i ,j]的地址计算公式为(9)。
7.局部优化是局限于一个(10)范围内的一种优化。
二.选择题(1-6为单选题,7-8为多选题,每问2分,共20分)1. 一个上下文无关文法G 包括四个组成部分:一组终结符,一组非终结符,一个(),以及一组()。
A .字符串B .产生式C .开始符号D .文法2.程序的基本块是指()。
A .一个子程序B .一个仅有一个入口和一个出口的语句C .一个没有嵌套的程序段D .一组顺序执行的程序段,仅有一个入口和一个出口 3. 高级语言编译程序常用的语法分析方法中,递归下降分析法属于()分析方法。
A .自左向右 B .自顶向下 C .自底向上 D .自右向左 4.在通常的语法分析方法中,()特别适用于表达式的分析。
A .算符优先分析法 B . LR 分析法 C .递归下降分析法 D . LL (1)分析法 5.经过编译所得到的目标程序是()。
A .四元式序列B .间接三元式序列C .二元式序列D .机器语言程序或汇编语言程序 6.一个文法所描述的语言是();描述一个语言的文法是()。
A .唯一的 B .不唯一的 C .可能唯一,也可能不唯一7.如果在文法G 中存在一个句子,当其满足下列条件()之一时,则称该文法是二义文法。
编译原理期末考试题(含答案)1. 请简要解释编译原理的定义和作用。
编译原理是研究将高级语言源程序转化为等价的目标程序的一门学科。
它的主要作用是将高级语言的源代码翻译为计算机能够执行的目标代码,从而实现程序的运行。
2. 请列举并解释编译过程的各个阶段。
- 词法分析:将源代码划分为一个个词法单元,如变量、关键字等。
- 语法分析:根据语法规则,将词法单元组合为语法树,检查语法结构是否正确。
- 语义分析:对语法树进行语义检查,如类型匹配、作用域等。
- 中间代码生成:将语法树转化为中间代码表示形式,方便后续优化。
- 代码优化:对中间代码进行优化,提高程序执行效率。
- 目标代码生成:将优化后的中间代码转化为目标机器代码。
3. 请解释符号表在编译过程中的作用。
符号表是编译器在编译过程中用来管理变量、函数、类型等标识符的数据结构。
它的主要作用是记录标识符的相应属性,如类型、作用域等,以便在后续的语法、语义分析以及代码生成过程中进行查找、检查等操作。
4. 请简要解释LL(1)文法的定义和特点。
LL(1)文法是一种上下文无关文法,它具有以下特点:- 对于给定的非终结符,它的产生式右部的首符号不相同。
- 对于给定的产生式右部的首符号,它的产生式右部不相同。
- 通过向前查看一个符号,就能确定所选用的产生式。
5. 请简要解释词法分析器的作用和实现方式。
词法分析器的主要作用是将源代码分解为一个个词法单元,如变量名、关键字等。
它的实现方式一般采用有限自动机,通过定义正则表达式描述各个词法单元的模式,然后根据模式匹配的结果生成相应的词法单元。
答案仅为参考,请以实际考试为准。
编译原理期末考试试卷( A 卷)一、简述编译程序的工作过程。
( 10)二、构造下列正规式相应的DFA (用状态转换图表示)( 15)(1) 1( 0 | 1) *100(2) 0*10*10*10*1(3) letter (letter | digit ) *三、给出下面语言的相应文法:(15)L1 ={a n b n |n≥1}L 2={a n b m+n a m|n≥1,m≥ 0}四、对下面的文法G:S→a | b | ( T)T→T,S | S(1)消去文法的左递归,得到等价的文法G2;(2)判断文法 G2 是否 LL ( 1)文法,如果是,给出其预测分析表。
( 15)五、设有文法G[A] :A→ BCc | gDBB→ bCDE | εC→DaB | caD→ dD |εE→gAf | c(1) 计算该文法的每一个非终结符的FIRST 集和 FOLLOW 集;(2)试判断该文法是否为 LL ( 1)文法。
(15)六、对表达式文法G:E → E+T|TT → T*F|FF → (E)|I(1)造各非终结符的 FIRSTVT 和 LASTVT 集合;(2)构造文法的算符优先关系表。
(15)七、有定义二进制整数的文法如下:L →LB|BB →0|1构造一个翻译模式,计算该二进制数的值(十进制的值)。
( 15)简述编译程序的工作过程。
(10)编译程序的工作过程,是指从输入源程序开始到输出目标程序为止的整个过程,是非常复杂的,就其过程而言,一般可以划分为五个工作阶段:①词法分析,对构成源程序的字符串进行扫描和分解,识别出一个个的单词;②语法分析,根据语言的语法规则,把单词符号串分解成各类语法单位;③语义分析与中间代码产生,即对各类语法单位,分析其汉一并进行初步翻译;④代码优化,以期产生更高效的代码;⑤目标代码生成,把中间代码变换成特定机器上的低级语言指令形式。
二、构造下列正规式相应的DFA (用状态转换图表示)( 15)(4) 1(0 | 1)*1( 5) 0*10*10*10*10,1(6) letter (letter | digit ) *01( 1)1230000( 2)151111234(3)letterletter12digit三、给出下面语言的相应文法:(15)L1 ={a n b n|n≥1}L 2={a n b m+n a m|n≥1,m≥ 0}G1:G1 :A→ aAb |ab S→ABA → aAb | abB → bBa |ε四、对下面的文法G:S→a | b | ( T)T→T,S | S(1) 消去文法的左递归,得到等价的文法G2;(2) 判断文法G2 是否 LL ( 1)文法,如果是,给出其预测分析表。
编译原理期末试题及答案一、选择题(每题2分,共20分)1. 编译器的主要功能是将()代码转换成()代码。
A. 高级语言,低级语言B. 高级语言,机器语言C. 汇编语言,机器语言D. 机器语言,汇编语言答案:B2. 编译过程中,词法分析的输出是()。
A. 语法树B. 语法分析表C. 词法单元D. 抽象语法树答案:C3. 在编译原理中,语法分析通常采用()方法。
A. 递归下降分析B. 动态规划C. 贪心算法D. 回溯算法答案:A4. 语义分析的主要任务是()。
A. 检查语法错误B. 生成中间代码C. 检查语义错误D. 优化代码答案:C5. 编译器的优化通常发生在()阶段。
A. 词法分析B. 语法分析C. 语义分析D. 代码生成答案:D6. 编译器的前端主要负责()。
A. 代码生成B. 代码优化C. 语法分析D. 目标代码生成答案:C7. 编译器的后端主要负责()。
A. 代码生成B. 代码优化C. 语法分析D. 词法分析答案:A8. 编译原理中,LL(1)分析方法的特点是()。
A. 左到右,最右推导B. 左到右,最左推导C. 右到左,最右推导D. 右到左,最左推导答案:B9. 编译原理中,LR(1)分析方法的特点是()。
A. 左到右,最右推导B. 左到右,最左推导C. 右到左,最右推导D. 右到左,最左推导答案:B10. 编译原理中,语法制导翻译的主要思想是()。
A. 根据语法树的结构进行翻译B. 根据词法单元进行翻译C. 根据语法分析表进行翻译D. 根据语义分析表进行翻译答案:A二、填空题(每题2分,共20分)1. 编译器中,用于表示语法规则的产生式通常由非终结符、产生符号和()组成。
答案:产生式右侧2. 在编译原理中,一个文法是()的,如果它的任何两个产生式都不会导致相同的句柄。
答案:无二义性3. 编译器的词法分析阶段通常使用()算法来识别和分类词法单元。
答案:有限自动机4. 语法分析阶段,如果一个文法是左递归的,编译器需要使用()技术来消除左递归。
一、单选题1、编译程序是一种( )。
A.汇编程序B.目标程序C.翻译程序D.解释程序正确答案:C2、若文法G定义的语言是无限集,则文法必然是( )。
A.二义性的B.上下文无关的C.递归的D.无二义性的正确答案:C3、一个上下文无关文法G包括四个组成部分,它们是一组非终结符号,一组终结符号,一个开始符号,以及一组( )。
A.句子B.单词C.产生式D.句型正确答案:C4、文法G:S →x xS | y 所识别的语言是( )。
A.xxy∗B. xx∗yxC.(xxy)∗D.(xx)∗y正确答案:D5、文法G:S →xS | y 所识别的语言是( )。
A.(xy)∗B.xy∗C.x∗yD. xx∗yx正确答案:C6、在自上而下的语法分析中,应从( )开始分析。
A.句型B.句子C.文法开始符号D.句柄正确答案:C7、语法分析器的输入是()。
A.符号表B.目标程序C.源程序D.Token序列正确答案:D8、LL(1)分析法中“1”的含义是在输入串中查看一个输入符号,其目的是()。
A.确定最左推导B.确定是否推导C.确定句柄D.确定使用哪一个产生式进行展开正确答案:D9、同正规式(a|b)∗等价的正规式为( )。
A.a∗|b∗B.(a|b)+C.(ab)∗D.(a∗|b∗)+正确答案:D10、已知文法G[S]:S→A1,A→A1|S0|0,与G等价的正规式是( )。
A.1∗|0∗1B.0(1|10)∗1C.0(0|1)∗D.1(10|01)∗0正确答案:B11、与(a|b)∗(a|b)等价的正规式是( )。
A.a∗|b∗B.(ab)∗(a|b)C.(a|b)(a|b)∗D.(a|b)∗正确答案:C12、如果一个正规式所代表的集合是无穷的,则它必含有的运算是( )。
A.接运算“·”B.或运算“|”C.括号“(”和“)”D.闭包运算“* ”正确答案:D13、在语法分析处理中,FIRST集合、FOLLOW集合均是( )。
一、填空题| (每题4分,共20分)1.乔母斯基定义的3型文法(线性文法)产生式形式A Ba|a,或A aB|a, A, B € Vn, a,b € Vt 。
2.语法分析程序的输入是单词符号,其输出是语法单位。
3型为B .aB的LR(0)项目被称为移进项目,型为B a.B的LR (0) 项目被称为待约项目,4. 在属性文法中文法符号的两种属性分别为继承属性和综合属性。
5、运行时存贮管理方案有静态存储分配、动态存储分配和堆式存储分配和方案。
二.已知文法G(S)⑴ E T | E+T⑵ T F | F*F⑶ F (E) | i(1)写出句型(T*F+i)的最右推到并画出语法树。
(4分)(2)写出上述句型的短语,直接短语和句柄。
(4分)答:(1)最右推到(2分)E ==> T ==>F ==> (E) ==> (E+T) ==> (E+F) ==> (E+i) ==> (T+i) ==> (T*F+i)(2)语法树(2分)IS/|\7i\E+T(3)(4 分)短语:(T*F+i ) ,T*F+i ,T*F,i直接短语:T*F,i句柄:T*F三.证明文法G(S) : S SaS | £是二义的。
(6分) 答:句子aaa对应的两颗语法树为:因此,文法是二义文法四.给定正规文法G( S):(1) S Sa | Ab |b ⑵A Sa请构造与之等价的DFA ( 6分) 答:对应的NFA 为: (6分)a b {F}① {S} {S}{S,A} ①{S,A} {S,A} {S}五•构造识别正规语言b*a(bb*a)*b* 最小的DFA(要求写出求解过程)。
(15分) 答:(1)对应的NFA(5分)a b{0}{1 , 3} {0} {1,3} ① {2 , 3} {2,3} {1,3}{2,3}六.已知文法G(S):(1) S A | a | (T)⑵ T T,S | S试:(1)消除文法的左递归;(4分)(2) 构造相应的first 和follow 集合。
编译原理考试题及答案一、选择题(每题2分,共20分)1. 编译器的主要功能是将高级语言源程序转换成机器语言目标程序。
(对/错)答案:对2. 编译过程中,词法分析器的主要任务是识别源程序中的各种词法单位。
(对/错)答案:对3. 在语法分析阶段,编译器使用的数据结构是栈。
(对/错)答案:错4. 语义分析的主要目的是检查程序的语法结构是否正确。
(对/错)答案:错5. 编译器的优化阶段可以提高目标程序的执行效率。
(对/错)答案:对6. 编译器的代码生成阶段负责将中间代码转换为目标代码。
(对/错)答案:对7. 编译器的运行时系统包括内存管理、输入输出处理等功能。
(对/错)答案:对8. 编译器的前端主要负责源程序的分析,后端负责目标代码的生成。
(对/错)答案:对9. 编译器的词法分析阶段不涉及对标识符的识别。
(对/错)答案:错10. 编译器的语法分析阶段可以识别出所有的语法错误。
(对/错)答案:对二、填空题(每题2分,共20分)1. 编译器在进行语法分析时,通常采用________算法。
答案:LL(1)或LR(1)2. 编译器在语义分析阶段,需要对变量的________进行检查。
答案:作用域和生命周期3. 编译器在代码优化阶段,常用的优化技术包括________和循环优化。
答案:常量传播4. 编译器在目标代码生成阶段,需要考虑________的约束。
答案:目标机器5. 编译器的运行时系统包括________、内存管理、输入输出处理等。
答案:程序启动和异常处理6. 编译器在词法分析阶段,需要识别的词法单位包括________、标识符、常量等。
答案:关键字7. 编译器在语法分析阶段,使用的分析表可以是________表或ACTION 表。
答案:GOTO8. 编译器在语义分析阶段,需要对表达式的________进行计算。
答案:类型9. 编译器的代码生成阶段,需要将中间代码转换为________代码。
答案:目标机器10. 编译器的运行时系统在内存管理中,需要处理________和垃圾收集。
1、试为表达式 w+(a+b)*(c+d/(e-10)+8) 写出相应的逆波兰表示。
2、写出表达式a+b*(c-d)/e的逆波兰式和三元序列。
3、写出表达式a:=(b+c)*e+(b+c)/f的逆波兰式和三元序列。
4、已知文法G(S)及相应翻译方案S→aAb {print “1”}S→a {print “2”}A→AS {print “3”}A→c {print “4"}输入acab, 输出是什么?5、已知文法G(S)S→bAaA→(B | aB→A a)写出句子b(aa)b的规范归约过程.6、已知文法G[S]S→S*aF | aF |*aFF→+aF | +a消除文法左递归。
1、设文法G(S):S→^ | a | (T)T→T,S | S⑴ 消除左递归;⑵ 构造相应的FIRST和FOLLOW集合;⑶ 构造预测分析表2.语句 if E then S(1)改写文法,使之适合语法制导翻译;(2)写出改写后产生式的语义动作。
4。
设某语言的for语句的形式为for i:=E(1) to E(2) do S其语义解释为i:=E(1)LIMIT:=E(2)again: if i<=LIMIT thenBeginS;i:=i+1goto againEnd;(1)写出适合语法制导翻译的产生式;(2)写出每个产生式对应的语义动作。
7。
已知文法G(S)S→a | ^ | (T)T→T,S | S(1) 给出句子(a,(a,a))的最左推导;(2) 给出句型((T,S),a)的短语, 直接短语,句柄。
8。
对于 C 语言do S while E语句(1)改写文法,使之适合语法制导翻译;(2)写出改写后产生式的语义动作.9。
已知文法G(S)S→aAcBeA→Ab| bB→d(1)给出句子abbcde的最左推导及画出语法树;(2)给出句型aAbcde的短语、素短语。
10。
设文法G(S):S→(T) | aS | aT→T,S | S⑴消除左递归和提公共左因子;⑵构造相应的FIRST和FOLLOW集合;⑶构造预测分析表。
编译原理考试题及答案一、选择题(每题2分,共10分)1. 在编译原理中,词法分析器的主要任务是什么?A. 将源代码转换为中间代码B. 识别源代码中的词法单元C. 进行语法分析D. 优化代码答案:B2. 下列哪个选项不是编译器的组成部分?A. 词法分析器B. 语法分析器C. 运行时环境D. 语义分析器答案:C3. 编译器的哪个阶段负责检查变量是否已经声明?A. 词法分析B. 语法分析C. 语义分析D. 代码生成答案:C4. 在编译原理中,哪些技术常用于错误恢复?A. 预测分析表和LR分析B. 递归下降分析和LR分析C. 预测分析表和递归下降分析D. 预测分析表和错误恢复算法答案:D5. 编译器中用于优化代码的阶段是哪一个?A. 词法分析B. 语法分析C. 语义分析D. 代码优化答案:D二、填空题(每题2分,共10分)1. 编译器的前端包括词法分析、语法分析和________。
答案:语义分析2. 在编译过程中,________分析器负责将源代码的逻辑结构转换为一种内部表示形式。
答案:语法3. 编译器的后端包括________、寄存器分配和代码生成。
答案:中间代码生成4. 编译器中的________分析用于检查程序中的类型错误。
答案:语义5. 编译器的________阶段负责将高级语言代码转换为目标机器代码。
答案:代码生成三、简答题(每题10分,共20分)1. 简述编译器的主要功能。
答案:编译器的主要功能包括将高级语言编写的源代码转换成目标机器可以执行的机器代码,同时进行错误检测、代码优化等。
它通常包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等阶段。
2. 描述编译过程中的语法分析阶段的主要任务。
答案:语法分析阶段的主要任务是检查源代码是否符合语言的语法规则,构建抽象语法树(AST),并进行语法制导的语义分析。
这一阶段使用诸如自顶向下的递归下降分析、自底向上的移进-规约分析等技术来识别语言结构,并为后续的语义分析和代码生成打下基础。
一. 填空题(每空2分,共20分)1. 不同的编译程序关于数据空间的存储分配策略可能不同,但大部分编译中采用的方案有两种:静态存储分配方案和动态存储分配方案,而后者又分为(1) 和 (2) 。
2. 规范规约是最(3)规约。
3. 编译程序的工作过程一般划分为5个阶段:词法分析、(4) 、语义分析与中间代码生成,代码优化及(5) 。
另外还有(6)和出错处理。
4.表达式x+y*z/(a+b)的后缀式为 (7) 。
5.文法符号的属性有综合属性和 (8)。
6.假设二位数组按行存放,而且每个元素占用一个存储单元,则数组a[1..15,1..20]某个元素a[i ,j]的地址计算公式为(9)。
7.局部优化是局限于一个(10)范围内的一种优化。
二. 选择题(1-6为单选题,7-8为多选题,每问2分,共20分)1. 一个上下文无关文法G 包括四个组成部分:一组终结符,一组非终结符,一个( ),以及一组( )。
A . 字符串B . 产生式C . 开始符号D . 文法 2.程序的基本块是指( )。
A . 一个子程序B . 一个仅有一个入口和一个出口的语句C . 一个没有嵌套的程序段D . 一组顺序执行的程序段,仅有一个入口和一个出口 3. 高级语言编译程序常用的语法分析方法中,递归下降分析法属于( )分析方法。
A . 自左向右 B . 自顶向下 C . 自底向上 D . 自右向左 4.在通常的语法分析方法中,( )特别适用于表达式的分析。
A . 算符优先分析法 B . LR 分析法 C . 递归下降分析法 D . LL (1)分析法 5.经过编译所得到的目标程序是( )。
A . 四元式序列B . 间接三元式序列C . 二元式序列D . 机器语言程序或汇编语言程序 6. 一个文法所描述的语言是( );描述一个语言的文法是( )。
A . 唯一的 B . 不唯一的 C . 可能唯一,也可能不唯一7.如果在文法G中存在一个句子,当其满足下列条件()之一时,则称该文法是二义文法。
《编译原理》期末试题(一)一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分)1.编译程序是对高级语言程序的解释执行。
(× )2.一个有限状态自动机中,有且仅有一个唯一的终态。
(×)3.一个算符优先文法可能不存在算符优先函数与之对应。
(√ )4.语法分析时必须先消除文法中的左递归。
(×)5.LR分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点。
(√)6.逆波兰表示法表示表达式时无须使用括号。
(√ )7.静态数组的存储空间可以在编译时确定。
(×)8.进行代码优化时应着重考虑循环的代码优化,这对提高目标代码的效率将起更大作用。
(×) 9.两个正规集相等的必要条件是他们对应的正规式等价。
(× )10.一个语义子程序描述了一个文法所对应的翻译工作。
(×)二、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分) 1.词法分析器的输出结果是_____。
A.( ) 单词的种别编码B.( ) 单词在符号表中的位置C.( ) 单词的种别编码和自身值D.( ) 单词自身值2.正规式M 1 和M 2 等价是指_____。
A.( ) M1和M2的状态数相等B.( ) M1和M2的有向边条数相等C.( ) M1和M2所识别的语言集相等D.( ) M1和M2状态数和有向边条数相等3.文法G:S→xSx|y所识别的语言是_____。
A.( ) xyx B.( ) (xyx)* C.( ) xnyxn(n≥0) D.( ) x*yx*4.如果文法G是无二义的,则它的任何句子α_____。
A.( )最左推导和最右推导对应的语法树必定相同B.( ) 最左推导和最右推导对应的语法树可能不同C.( ) 最左推导和最右推导必定相同D.( )可能存在两个不同的最左推导,但它们对应的语法树相同5.构造编译程序应掌握______。
一. 填空题(每空2分,共20分)1. 不同的编译程序关于数据空间的存储分配策略可能不同,但大部分编译中采用的方案有两种:静态存储分配方案和动态存储分配方案,而后者又分为(1) 和 (2) 。
2. 规范规约是最(3)规约。
3. 编译程序的工作过程一般划分为5个阶段:词法分析、(4) 、语义分析与中间代码生成,代码优化及(5) 。
另外还有(6)和出错处理。
4.表达式x+y*z/(a+b)的后缀式为 (7) 。
5.文法符号的属性有综合属性和 (8)。
6.假设二位数组按行存放,而且每个元素占用一个存储单元,则数组a[1..15,1..20]某个元素a[i ,j]的地址计算公式为(9)。
7.局部优化是局限于一个(10)范围内的一种优化。
二. 选择题(1-6为单选题,7-8为多选题,每问2分,共20分)1. 一个上下文无关文法G 包括四个组成部分:一组终结符,一组非终结符,一个( ),以及一组( )。
A . 字符串B . 产生式C . 开始符号D . 文法 2.程序的基本块是指( )。
A . 一个子程序B . 一个仅有一个入口和一个出口的语句C . 一个没有嵌套的程序段D . 一组顺序执行的程序段,仅有一个入口和一个出口 3. 高级语言编译程序常用的语法分析方法中,递归下降分析法属于( )分析方法。
A . 自左向右 B . 自顶向下 C . 自底向上 D . 自右向左 4.在通常的语法分析方法中,( )特别适用于表达式的分析。
A . 算符优先分析法 B . LR 分析法 C . 递归下降分析法 D . LL (1)分析法 5.经过编译所得到的目标程序是( )。
A . 四元式序列B . 间接三元式序列C . 二元式序列D . 机器语言程序或汇编语言程序 6. 一个文法所描述的语言是( );描述一个语言的文法是( )。
A . 唯一的 B . 不唯一的 C . 可能唯一,也可能不唯一7.如果在文法G中存在一个句子,当其满足下列条件()之一时,则称该文法是二义文法。
编译原理期末考试试卷及答案1. 不同的编译程序关于数据空间的存储分配策略可能不同,但大部分编译中采用的方案有两种:静态存储分配方案和动态存储分配方案,而后者又分为(1) 和 (2) . 2. 规范规约是最(3)规约.3. 编译程序的工作过程一般划分为5个阶段:词法分析、(4) 、语义分析与中间代码生成,代码优化及(5) .另外还有(6)和出错处理.4.表达式x+y*z/(a+b)的后缀式为 (7) . 5.文法符号的属性有综合属性和 (8).6.假设二位数组按行存放,而且每个元素占用一个存储单元,则数组a[1..15,1..20]某个元素a[i ,j]的地址计算公式为(9).7.局部优化是局限于一个(10)范围内的一种优化. 二. 选择题(1-6为单选题,7-8为多选题,每问2分,共20分)1. 一个上下文无关文法G 包括四个组成部分:一组终结符,一组非终结符,一个( ),以及一组( ).A . 字符串B . 产生式C . 开始符号D . 文法 2.程序的基本块是指( ).A . 一个子程序B . 一个仅有一个入口和一个出口的语句C . 一个没有嵌套的程序段D . 一组顺序执行的程序段,仅有一个入口和一个出口 3. 高级语言编译程序常用的语法分析方法中,递归下降分析法属于( )分析方法. A . 自左向右 B . 自顶向下 C . 自底向上 D . 自右向左 4.在通常的语法分析方法中,( )特别适用于表达式的分析. A . 算符优先分析法 B . LR 分析法 C . 递归下降分析法 D . LL (1)分析法 5.经过编译所得到的目标程序是( ).A . 四元式序列B . 间接三元式序列C . 二元式序列D . 机器语言程序或汇编语言程序 6. 一个文法所描述的语言是( );描述一个语言的文法是( ). A . 唯一的 B . 不唯一的 C . 可能唯一,也可能不唯一7. 如果在文法G 中存在一个句子,当其满足下列条件( )之一时,则称该文法是二义文法. A . 其最左推导和最右推导相同 B . 该句子有两个不同的最左推导 C . 该句子有两个不同的最右推导 D . 该句子有两棵不同的语法树 E . 该句子对应的语法树唯一8. 下面( )语法制导翻译中,采用拉链—回填技术.A. 赋值语句B. 布尔表达式的计算C. 条件语句D. 循环语句1.(共15分)已知文法G[E]:E→ETE|(E)|iT→*|+(1)将文法G改造成LL(1)文法;(5分)(2)构造文法G中每个非终结符的FIRST集合及FOLLOW集合;(5分)(3)构造LL(1)分析表.(5分)2.(共12分)给定文法G[S]:S→S(S)|ε(1)给出句子(()())()()的规范推导过程;(4分)(2)指出每步推导所得句型的句柄;(4分)(3)画出该句子的语法推导树.(4分)3.(共8分)在一个移入-规约分析过程中采用以下的语法制导翻译模式,在按一个产生式规约时,立即执行括号中的动作.A→aB {print “0”;}A→c {print “1”;}B→Ab {print “2”;}(1)当分析器的输入为aacbb时,打印的字符串是什么?(3分)(2)写出分析过程.(5分)4.(10分)翻译循环语句 while (a<b) do if (c>d) then x:=y+z .要求:给出加注释的分析树及四元式序列.参考以下部分翻译模式:(1) S→if E then M S1 {backpatch(E.truelist,M.quad);S.nextlist:=merge(E.falselist,S1 .nextlist)}(2) S→while M1 E do M2 S1 {backpatch(S1.nextlist,M1,.quad);backpatch(E.truelist,M2,.quad);S.nextlist:=E.falselistemit (‘j,-,-,’M1 .quad)}(3) S→A {S.nextlist:=makelist()}(4) L→S {L.nextlist:=S.nextlist}(5) M→ε{M.quad:=nextquad}(6) E→id1 relop id2 {E.truelist:=makelist(nextquad);e.falselist:=makelist(nextquad+1);emit(‘j’relop.op,‘,’id1.place ‘,’id2.place‘,’‘0’);emit(‘j,-,-,0’)}(7) S→L:=E {emit(:=,E.place,-,L.place)}(8) E→E1+E2 {E.place:=newtemp;emit(+,E1.place,E2.place,E.place,)}5.(共15分)设有表格构造文法G[S]:S →a|∧|(T)T →T,S|S(1) 计算文法G[S]的FIRSTVT 集和LASTVT 集.(5分)(2) 构造G[S]的优先关系表,并判断G[S]是否为算符优先文法.(5分) (3) 计算G[S]的优先函数.(5分)二. 单项选择题(每题2分,共10分)1. 设有文法G[I]: I →I1|I0|Ia|Ic|a|b|c 下列符号串中是该文法句子的有( ).① ab0 ② a0c01 ③ aaa ④ bc10 可选项有:A . ①B .②③④C .③④D .①②③④ 2.程序的基本块是指( ).A . 一个子程序B . 一个仅有一个入口和一个出口的语句C . 一个没有嵌套的程序段D . 一组顺序执行的程序段,仅有一个入口和一个出口 3. 高级语言编译程序常用的语法分析方法中,递归下降分析法属于( )分析方法. A . 自左向右 B . 自顶向下 C . 自底向上 D . 自右向左 4.经过编译所得到的目标程序是( ).A . 四元式序列B . 间接三元式序列C . 二元式序列D . 机器语言程序或汇编语言程序 5. 运行阶段的存储组织与管理的目的是( ).① 提高编译程序的运行速度 ② 节省编译程序的存储空间 ③ 提高目标程序的运行速度 ④ 为运行阶段的存储分配做准备 可选项有:A. ①②B. ②③C. ③④D. ④② 2. (10分) 已知文法G[S]:S →aBc|bAB A →aAb|b B →b|ε(4) 构造其LL (1)分析表;(5) 判断符号串baabbb 是否为该文法的句子(写出含有符号栈、输入串和规则的分析过程). 3. (10分) 已知文法G 为:E →E+T|TT→T*P|PP→i(1)构造该文法的优先关系表(不考虑语句括号#),并指出此文法是否为算符优先文法.(2)构造文法G的优先函数表.4.(8分)在一个移入-规约分析过程中采用以下的语法制导翻译模式,在按一个产生式规约时,立即执行括号中的动作.S→bAb {print “1”}A→(B {print “2”}A→a {print “3”}B→Aa) {print “4”}(3)当输入序列为b(((aa)a)a)b时,打印的字符串是什么?(4)写出移入-规约分析过程.5.(12分)翻译循环语句 while (x>y) do if (a=b) then x:=2*y+a .要求:给出加注释的分析树、三地址码序列及相应的四元式序列.参考以下部分翻译模式:(1) S→if E then M S1 {backpatch(E.truelist,M.quad);S.nextlist:=merge(E.falselist,S1 .nextlist)}(2) S→while M1 E do M2 S1 {backpatch(S1.nextlist,M1,.quad);backpatch(E.truelist,M2,.quad);S.nextlist:=E.falselistemit (‘j,-,-,’M1 .quad)}(3) S→A {S.nextlist:=makelist()}(4) L→S {L.nextlist:=S.nextlist}(5) M→ε{M.quad:=nextquad}(6) E→id1 relop id2 {E.truelist:=makelist(nextquad);e.falselist:=makelist(nextquad+1);emit(‘j’relop.op,‘,’id1.place ‘,’id2.place‘,’‘0’);emit(‘j,-,-,0’)}(7) S→L:=E {emit(:=,E.place,-,L.place)}(8) E→E1+E2 {E.place:=newtemp;emit(+,E1.place,E2.place,E.place,)}6.(8分) Generate assembly code for the following sequence assuming that x,y and z are in memorylocations(noticing only two registers R1 and R2).S=0I=0L1: if x>y goto L2Z=s+a[i]I=i+1Goto L1L2:7. (6分) Give out the all basic blocks of the following program fragment and construct the relevant flow graph(DAG).read CA=0B=1L4: A=A+Bif B>C goto L2B=B+1goto L4L2: write A8.(8分)Translate the assignment statement b[i]=b*c-b*d into(1) A syntax tree.(2)Three address instructions.答案::(1)栈式动态存储分配(2)堆式动态存储分配(3)左(4)语法分析(5)目标代码生成(6)表格管理(7)xyz*ab+/+(8)继承属性(9)a+(i-1)*20+j-1(10)基本块一、选择题(每问2分,共20分)1.C B2.D3.B4.A5.D6.A,C7.BCD,选对一个得1分且不超过满分,选错一个扣一分,扣完为止.8.BCD,选对一个得1分且不超过满分,选错一个扣一分,扣完为止.二、解答题1.(1)文法存在左递归,消除左递归后的文法为:E→(E)E’|i E’(2分)E’→TEE’|ε(2分)T →*|+ (1分)(2)(5分)没考虑#扣0.5分,其它错或少写一个扣0.5分FIRST(E)={(,i} FIRST(E ’)={*,+, ε} FIRST(T)={*,+} FOLLOW(E)={),*,+,#} FOWLLOW(E ’)= {),*,+,#} FOLLOW(T)={(,i}2.(1)规范推导过程如下.写错推导符号扣0.5分,错写或少写一步推导扣0.5分,扣完为止,最左推导扣2分,共4分.(()())()())())()()(()())()()((())()())(())()()(()()())((()())()()(())()()(εεεεεε⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒S S S S S S S S S S S S S S S S S S S S (2)(1)中加下划线的部分是句柄,标识如(1).每少写一个句柄扣0.5分,扣完为止,共4分. (3)每少写步扣0.5分,扣完为止,共4分.3.(1)打印的字符串是:12020(错一个扣0.5分,共3分) (2)归约过程中错一步扣0.5分,扣完为止.(共5分) 4.(1)每少写一步扣0.5分,扣完为止,共5分.SSS ( S ) )S ( S ) ε )S ( S ) ε ) ε S ( S ) ) S ( S ) ε) ε ε(2)少写一个四元式扣0.5分,全错或不写不得分,回填错误扣0.5分,共5分. 四元式序列为:)100_,_,,(106)_,,1,(:105)1,,,(104)106_,_,,((103)104,,,(102)107_,_,,(101)b,102a,,j (100j x T T z y j d c j j =+><5.(1)少写一个扣1分,全错或不写不得分,共5分. FIRSTVT(S)={a,∧,(} FIRSTVT(T)={, a,∧,(} LASTVT(S)={ a,∧,)} LASTVT(T)={ a,∧,), ,}(2)优先表如下.每错一个扣0.5分,全错或不写不得分,扣完为止,共3分文法G[S]没有两个非终结符相邻的情况,且其优先表中任一对终结符之间最多满足⋖、⋗、 三种关系中的一种,因此是G[S]算符优先文法.(2分) (E3.t=102) ε L.p=x := E4.p=T1c>d x E5.p=y + E6.p=zy z或者(3)优先函数.可以不考虑终结符“#”.每错一个扣0.5分,全错或不写不得分,扣完为止,共5分.三、填空题(每空2分,共20分)1目标程序(target code)语法分析(syntax analyzer)代码优化器(code optimizer)代码产生器(code generator)符号表管理(symbol table manager)2 继承属性(inherited attribute)3 局部优化(local optimization)4 四元式(quatriple)5 E + * ( ) id四、单项选择题(每题2分,共10分)1.B2.D3.B4.D5.C五、解答题(共70分)1.(1) L(G)={0m1m|M≥1} 共2分,≥写成>扣1分(2)S=>0S1=>00S11=>000111,共3分, =>写成->扣1分(3)共3分,错处扣0.5分,扣完为止2.(1)空白表格也可以填写“错误”字样,共4分,错一个扣0.5分,扣完为止(2)共6分,其中判断“baabbb是该文法句子”为2分,其他错一个扣0.5分,扣完为止3.(1)共6分,其中判断“该文法为算符优先文法”为2分,其他错一个扣0.5分,扣完为止(2) 共4分,错一个扣0.5分,扣完为止4.(1)34242421 ,共4分,错一个扣0.5分(2)共4分,错一个扣0.5分,扣完为止5.共12分,其中带注释的分析树、三地址码序列和四元式序列分别为4分,错一个序列扣0.5分,而错某点(某项)少于或等于5个扣0.5分带注释语法树(略)三地址码序列四元式序列M1: if (x>y) goto M2 100 (j>, x,y,102)goto M4 101 (j,-,-,108)M2: if (a=b) goto M3 102 (j=,a,b,104)goto M1 103 (j,-,-,100)M3: t1=2*y 104 (*,2,y,t1)t2=t1+a 105 (+,t1,a,t2)x=t2 106 (=,t2,-,x)goto M1 107 (j,-,-,100)M4: 108 (-,-,-,-)6.共8分,错一个扣0.5分,扣完为止LD R1,0ST S,R1ST I,R1L1: LD R1,XSUB R1,R1,Y (OR SUB R1,Y)BGTZ R1,L2LD R2,a(R1)ADD R2,R2,S (OR ADD R2,S)ST Z,R2LD R1,I (从这开始,下面的语句中的R1也可以全部变成R2)ADD R1,R1,1 (OR INC R1)ST I,R1BR L1L2:7.共6分,基本块划分和流图各为3分,错一处扣 1分,扣完为止8. (1)共4分,错一项扣1分,扣完为止(2)共4分,错一项扣1分,扣完为止t1=b*ct2=b*dt3=t1-t2t4=i+1 (or t4=i)b[t4]=t3一、判断题:1.一个上下文无关文法的开始符,可以是终结符或非终结符. ( )2.一个句型的直接短语是唯一的. ( )3.已经证明文法的二义性是可判定的. ()4.每个基本块可用一个DAG表示. ()5.每个过程的活动记录的体积在编译时可静态确定. ()6.2型文法一定是3型文法. ()7.一个句型一定句子. ( )8.算符优先分析法每次都是对句柄进行归约. ( )9.采用三元式实现三地址代码时,不利于对中间代码进行优化. ()10.编译过程中,语法分析器的任务是分析单词是怎样构成的. ( )11.一个优先表一定存在相应的优先函数. ( )12.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题. ( )13.递归下降分析法是一种自下而上分析法. ( )14.并不是每个文法都能改写成LL(1)文法. ( )15.每个基本块只有一个入口和一个出口. ( )16.一个LL(1)文法一定是无二义的. ( )17.逆波兰法表示的表达试亦称前缀式. ( )18.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题. ( )19.正规文法产生的语言都可以用上下文无关文法来描述. ( )20.一个优先表一定存在相应的优先函数. ( )21.3型文法一定是2型文法. ( )22.如果一个文法存在某个句子对应两棵不同的语法树,则文法是二义性的. ( )二、填空题:1.( )称为规范推导.2.编译过程可分为(),(),(),()和()五个阶段.3.如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是().4.从功能上说,程序语言的语句大体可分为()语句和()语句两大类.5.语法分析器的输入是(),其输出是().6.扫描器的任务是从()中识别出一个个().7.符号表中的信息栏中登记了每个名字的有关的性质,如()等等.8.一个过程相应的DISPLAY表的内容为().9.一个句型的最左直接短语称为句型的().10.常用的两种动态存贮分配办法是()动态分配和()动态分配.11.一个名字的属性包括( )和( ).12.常用的参数传递方式有(),()和().13.根据优化所涉及的程序范围,可将优化分成为(),()和()三个级别.14.语法分析的方法大致可分为两类,一类是()分析法,另一类是()分析法.15.预测分析程序是使用一张()和一个()进行联合控制的.16.常用的参数传递方式有(),()和().17.一张转换图只包含有限个状态,其中有一个被认为是()态;而且实际上至少要有一个()态.18.根据优化所涉及的程序范围,可将优化分成为(),()和()三个级别.19.语法分析是依据语言的()规则进行.中间代码产生是依据语言的()规则进行的.20.一个句型的最左直接短语称为句型的().21.一个文法G,若它的预测分析表M不含多重定义,则该文法是()文法.22.对于数据空间的存贮分配, FORTRAN采用( )策略, PASCAL采用( )策略.23.如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是( ).24.最右推导亦称为(),由此得到的句型称为()句型.25.语法分析的方法大致可分为两类,一类是()分析法,另一类是()分析法.26.对于文法G,仅含终结符号的句型称为 ( ).27.所谓自上而下分析法是指().28.语法分析器的输入是(),其输出是().29.局限于基本块范围的优化称().30.预测分析程序是使用一张()和一个()进行联合控制的.31.2型文法又称为()文法;3型文法又称为()文法.32.每条指令的执行代价定义为().33.算符优先分析法每次都是对()进行归约.三、名词解释题:1.局部优化2.二义性文法3.DISPLAY表4.词法分析器5.最左推导6.语法7.文法8.基本块9.语法制导翻译10.短语11.待用信息12.规范句型13.扫描器14.超前搜索15.句柄16.语法制导翻译17.规范句型18.素短语19.语法20.待用信息21.语义四、简答题:1.写一个文法G, 使其语言为不以0开头的偶数集.2.已知文法G(S)及相应翻译方案S→aAb {print “1”}S→a {print “2”}A→AS {print “3”}A→c {print “4”}输入acab, 输出是什么?3. 已知文法G(S)S→bAaA→(B | aB→Aa)写出句子b(aa)b的规范归约过程.4. 考虑下面的程序:…procedure p(x, y, z);beginy:=x+y;z:=z*z;endbeginA:=2;B:=A*2;P(A, A, B);Print A, Bend.试问,若参数传递的方式分别采用传地址和传值时,程序执行后输出 A, B的值是什么?5.文法G(S)S→dABA→aA| aB→Bb| ε描述的语言是什么?6.证明文法G(S)S→SaS| ε是二义性的.7.已知文法G(S)S→BAA→BS| dB→aA| bS | c的预测分析表如下给出句子 adccd 的分析过程.8.写一个文法G, 使其语言为 L(G)={a l b m c l a n b n| l>=0, m>=1, n>=2}9.已知文法G(S):S→a| (T)T→T,S|S的优先关系表如下:10.何谓优化?按所涉及的程序范围可分为哪几级优化?11.目标代码有哪几种形式?生成目标代码时通常应考虑哪几个问题?12.一字母表Σ={a, b},试写出Σ上所有以a为首的字组成的正规集相对应的正规式.13.基本的优化方法有哪几种?14.写一个文法G, 使其语言为 L(G)={ab n c n| n≥0}15.考虑下面的程序:…procedure p(x, y, z);beginy:=y+z;z:=y*z+xend;begina:=2;b:=3;p(a+b, b, a);print aend.试问,若参数传递的方式分别采用传地址和传值时,程序执行后输出 a的值是什么?16.写出表达式a+b*(c-d)/e的逆波兰式和三元序列.17.证明文法G(A)A→AA | (A)| ε是二义性的.18.令Σ={a,b},则正规式a*b|b*a表示的正规集是什么?19.何谓DISPLAY表?其作用是什么?20.考虑下面的程序:…procedure p(x, y, z);beginy:=y+2;z:=z+x;endbegina:=5;b:=2;p(a+b, a-b, a);print aend.试问,若参数传递的方式分别采用传地址和传值时,程序执行后输出 a的值是什么?21.写一个文法G, 使其语言为 L(G)={a n b n c m| n>0为奇数, m>0为偶数}22.写出表达式a:=(b+c)*e+(b+c)/f的逆波兰式和三元序列.23.一个文法G别是LL(1)文法的充要条件是什么?24.已知文法G[S]S→S*aF | aF | *aFF→+aF | +a消除文法左递归和提公共左因子.25.符号表的作用是什么?符号表查找和整理技术有哪几种?五、计算题:1.设文法G(S):S→^ | a | (T)T→T,S | S⑴消除左递归;⑵构造相应的FIRST和FOLLOW集合;⑶构造预测分析表2.语句 if E then S(1) 改写文法,使之适合语法制导翻译;(2) 写出改写后产生式的语义动作.3.设文法G(S):S→(T) | aT→T+S | S(1)计算FIRSTVT 和LASTVT;(2)构造优先关系表.4.设某语言的for语句的形式为for i:=E(1) to E(2) do S其语义解释为i:=E(1)LIMIT:=E(2)again: if i<=LIMIT thenBeginS;i:=i+1goto againEnd;(1)写出适合语法制导翻译的产生式;(2)写出每个产生式对应的语义动作.5.把语句while a<10 do。