编译原理期末考试习题及答案
- 格式:doc
- 大小:438.00 KB
- 文档页数:8
《编译原理》期末试题(一)一、是非题(请在括号内,正确的划√,错误的划×)(每个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. 编译器的前端主要负责以下哪项工作?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.编译程序是对高级语言程序的解释执行。
(× )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 .编译程序首先要识别出源程序中每个单词 ,然后再分析每个 句子 并翻译其意义。
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* B .最左推导和最右推导对应的语法树可能不同D .可能存在两个不同的最左推导,但它们对应的语法树相同 编译方法 D .以上三项都是 C .符号表 D .程序变量 C . AB ∨┐ CD ∨∧ D . A ┐ B ∨∧ CD ∨ B .占用存储空间较小C .运行时间短但占用内存空间大D .运行时间短且占用存储空间小9.下列 ___C___优化方法不是针对循环优化进行的。
一. 填空题(每空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.对付编译步调而止,输进数据是源步调,输出截止是目标步调.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.把汇编谈话翻译成呆板谈话。
一、填空题(每空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 文法,给出阐发表) 答:(1) 该文法的拓广文法是: (2分) E ’→E (1)dSSa bSSad SaSSabSddE → 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.把汇编语言翻译成机械语言。
第八节习题一、单项选择题1、将编译程序分成若干个“遍”是为了。
a.提高程序的执行效率b.使程序的结构更加清晰c.利用有限的机器内存并提高机器的执行效率d.利用有限的机器内存但降低了机器的执行效率2、构造编译程序应掌握。
a.源程序b.目标语言c.编译方法d.以上三项都是3、变量应当。
a.持有左值b.持有右值c.既持有左值又持有右值d.既不持有左值也不持有右值4、编译程序绝大多数时间花在上。
a.出错处理b.词法分析c.目标代码生成d.管理表格5、不可能是目标代码。
a.汇编指令代码b.可重定位指令代码c.绝对指令代码d.中间代码6、使用可以定义一个程序的意义。
a.语义规则b.词法规则c.产生规则d.词法规则7、词法分析器的输入是。
a.单词符号串b.源程序c.语法单位d.目标程序8、中间代码生成时所遵循的是- 。
a.语法规则b.词法规则c.语义规则d.等价变换规则9、编译程序是对。
a.汇编程序的翻译b.高级语言程序的解释执行c.机器语言的执行d.高级语言的翻译10、语法分析应遵循。
a.语义规则b.语法规则c.构词规则d.等价变换规则解答1、将编译程序分成若干个“遍”是为了使编译程序的结构更加清晰,故选b。
2、构造编译程序应掌握源程序、目标语言及编译方法等三方面的知识,故选d。
3、对编译而言,变量既持有左值又持有右值,故选c。
4、编译程序打交道最多的就是各种表格,因此选d。
5、目标代码包括汇编指令代码、可重定位指令代码和绝对指令代码3种,因此不是目标代码的只能选d。
6、词法分析遵循的是构词规则,语法分析遵循的是语法规则,中间代码生成遵循的是语义规则,并且语义规则可以定义一个程序的意义。
因此选a。
7、b 8、c 9、d 10、c二、多项选择题1、编译程序各阶段的工作都涉及到。
a.语法分析b.表格管理c.出错处理d.语义分析e.词法分析2、编译程序工作时,通常有阶段。
a.词法分析b.语法分析c.中间代码生成d.语义检查e.目标代码生成解答1.b、c 2. a、b、c、e三、填空题1、解释程序和编译程序的区别在于。
编译原理期末复习题及答案# 一、选择题1. 编译程序的前端主要完成以下哪项工作?A. 代码优化B. 目标代码生成C. 词法分析D. 运行时支持答案:C2. 语法分析中,用于表示语法规则的是:A. 正则表达式B. 语法树C. 产生式D. 语法图答案:C3. 语义分析的主要任务是:A. 识别词法单位B. 构建语法树C. 确定语法单位的意义D. 生成中间代码答案:C4. 下列哪一项不是中间代码的形式?A. 三地址代码B. 四元组C. 抽象语法树D. 汇编语言答案:D5. 代码优化的目的是:A. 增加程序的可读性B. 减少程序的运行时间C. 提高程序的执行安全性D. 增强程序的可移植性答案:B# 二、简答题1. 简述词法分析的主要任务和实现方法。
答案:词法分析的主要任务是将源程序文本分解成一系列的词法单元,即标记。
实现方法通常包括模式匹配和状态转换,使用有限自动机(如正则表达式引擎)来识别词法单元。
2. 描述语法分析的过程,并解释递归下降分析法。
答案:语法分析是将词法分析得到的标记序列转换成一个语法树的过程。
递归下降分析法是一种自顶向下的语法分析方法,它通过递归调用分析函数,根据当前的输入符号和语法规则来决定下一步的分析动作。
3. 解释代码优化中的“死码消除”是什么,并给出一个例子。
答案:死码消除是一种代码优化技术,用于删除程序中不再使用的代码,这些代码对程序的输出没有影响。
例如,如果一个变量的值在赋值后不再被使用,那么这个赋值语句就是死码,可以被消除。
# 三、计算题1. 给定一个简单的算术表达式 `a + b * c`,请使用递归下降分析法生成其语法树。
答案:首先识别 `a` 和 `b` 为因子,然后识别 `*` 为乘法操作符,接着识别 `c` 为因子。
根据运算符优先级,先计算 `b * c`,再与 `a` 相加。
语法树结构如下:```+/ \a */ \b c```2. 给定一个简单的三地址代码序列 `[1] = a + [2]`,`[2] = b * c`,请转换为四元组形式。
一、填空题|(每题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)
(1) E → T | E+T
(2) T → F | F*F
(3) 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分)
(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
(2) 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}
(5分)
六. 已知文法G(S) :
(1) S → ^ | a | (T)
(2) T → T,S | S
试:(1)消除文法的左递归;(4分)
(2)构造相应的first 和 follow 集合。
(6分)
答:(1)消除文法的左递归后文法 G’(S)为:
(1) S → ^ | a | (T)
(2) T → ST ’ | S
(3) T ’ → ,ST ’ |ε (4分)
七. 已知文法 G(S) :
(1) S → SiA | A (2) A → A+B | B (3) B → A* | (
试构造非终止符的firstVT 和lastVT 集合。
(10分) 八.已知文法 G(S) :
(1) S → B B
(2) B → a B
(3) B → b
的follow 集合如表:
试:(1)给出该文法的LR (0)项目集规族划分; (2)填写相应的SLR (1)的分析表。
(15分)
答:(1)LR (0)项目集规族划分(8分)
I 0 S ’→ .S S → .BB B → .aB B → .b ---→ I 1 ---→ I 2 --→ I 3 --→ I 4
S B a b I 1 S ’→ S. I 2 S → B.B B → .aB B → .b ---→ I 5 --→ I 3 --→ I 4 B a b I 3
B → a.B B → .aB B → .b ---→ I 6
--→ I 3
--→ I 4 B a b I 4 B → b. I 5 S → BB. I 6 B → aB.
6 R2 R2 R2
九.设某语言的not-then-else 语句的语法形式为:S → not E then S
1
其语义解释为:
针对自上而下的语法分析器,
(1) 分段产生式;(3分)
(2) 写出每个产生式对应的语义动作。
(7分)
答:(1)分段产生式(3分)及语义动作(7分)
(1) R → not E then { Backpatch($2.FC ,nxq );
$$.chain = $2.Tc }
(2) S → R S
{ Backpatch($2.chain , nxq )}
1
一、填空题|(每题4分,共20分)
1. 乔母斯基定义的2型文法(上下文无关文法)产生式形式 A→β,A∈Vn, β∈V+。
2.词法分析程序的输入是字符串,其输出是单词符号。
3 算符有限分析方法每次都是对最左素短语进行规约。
型为 B → aB. 的LR(0)项
目被称为规约项目。
4、写出x:=b*(d-e)/(c-d)+e的逆波兰式__xbde-*cd-/e+:=__。
5、常用的两种动态存贮分配办法是__栈式存储分配和堆式存储__分配。
二.已知文法G(S) :
(1) S → ^ | a | (T)
(2) T → T,S | S
试:(1)写出句型(a,(a,a))的最左推到并画出语法树。
(4分)
(2)写出上述句子的短语,直接短语和句柄。
(4分)
答:(1)最左推到(2分)
S ==> (T) ==> (T,S)==> (S,S) ==> (a,S) ==> (a,(T)) ==> (a,(T,S)) ==> (a,(S,S)) ==> (a,(a,S)) ==> (a,(a,a))
(2) 语法树(2分)
(3)(4分)
短语:(a,(a,a)),a,(a,a) , (a,a) , a,a , a
直接短语:a
句柄:a
三.证明文法 G(S) : S → aSb | Sb | b 是二义的。
(6分)答:句子 aabbbb对应的两颗语法树为:
因此,文法是二义文法
四.给定正规文法G(S):
(1) S → aA
(2) A → aB | bA
(3)B → aA | b
请构造与之等价的DFA。
(6分)
答:对应的DFA为:(6分)
五. 构造识别正规语言(ab*|a)*最小的DFA(要求写出求解过程)。
(15分)答:(1)对应的NFA (5分)
a b
{1} {1,2} Φ
{1,2} {1,2} {1,2}
(5分)
六. 已知文法G(S) :
(1) S → ^ | a | (T)
(2) T → ST’ | S
(3) T’→ ,ST’ |ε
试:求first和follow集合,构造改文法的LL(1)分析表。
(10分)答:文法相应的first 和 follow 集合(5分)
七. 已知文法G(S) :
(1) S → SiA | A
(2) A → A+B | B
(3) B → A* | (
:
八已知文法G(S) :
(1) S → a | aAb | b | bBa
(2) A → 1A0 | ε
(3) B → 1B0 | ε
求:该文法的LR(0)项目集规族。
(15分)答:
九.设某语言的DO-while 语句的语法形式为:
while E
S → do S
1
其语义解释为:
针对自上而下的语法分析器,
(1) 分段产生式;(3分)
(2) 写出每个产生式对应的语义动作。
(7分)
答:(1)分段产生式(3分)
G(S) : (1) R → do
while
(2) U → R S
1
(3) S → U E
(2) 产生式对应的语义动作(7分)
(1) R → do { $$.loop = nxq }
while { $$.loop = $1.loop }
(2) U → R S
1
(3) S → U E { backpatch($2.FC , $1.loop );
Backpatch($2.TC , nxq ) }。