编译原理模拟题

一、 填空题(每空1分,共20分)1.编译过程一般分为 词法分析 、语法分析、中间代码生成、代码优化和目标代码生成五个阶段2.语法分析最常用的两类方法是自上而下 和 自下而上 分析法3.确定的有穷自动机是一个 五元组 ,通常表示为 DFA=(K , ∑, M, S, Z) 4.所谓最右推导是指 任何一步都是对中最右非终结符进行替换 5.语法分析器的任务是 分析一个文法的句子结构6.如果一个文法的任何产生式的右部都不含有相邻的非终结符,则这种文法称为 算符 文法7.进行确定的自上而下语法分析要求语言的文法是无 左递归 和 公共左因子 的8.LR分析法是一种 自下而上 的语法分析方法9.根据优化对象所涉及的程序范围,代码优化分为 局部优化 、循环优化和 局部优化 等10.常用的优化技术包括: 删除公共子表达式 、 代码外提 、强度削弱、复写传播、 变换循环控制条件 等合并已知量、删除无用赋值)二、是非题(下列各题,你认为正确的,请在题后的括号内打“ √”,错的打“×”每题2分,共20分) 1.正规文法产生的语言都可以用上下文无关文法来描述。
× )2.仅考虑一个基本块,不能确定一个赋值是否真是无用的 √ )3.如果一个文法是递归的,则其产生的语言的句子是无穷个 (√ )4.四元式之间的联系是通过符号表实现的 × )5.文法的二义性和语言的二义性是两个不同的概念 ( √ )6.一个LL( l)文法一定是无二义的 ( √ )7.在规范规约中用最左素短语来刻划可归约串 × )8.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题 ( √ )9.编译程序是对汇编程序的翻译 ( × )10.逆波兰法表示的表达式亦称前缀式 ( × )三、 简答题(每题5分,共15分)1、简述栈式存储管理策略; 2、何谓DAG; 3、何谓文法的二义性;四、 给出下述文法对应的正规式 (7分) S→ 0A| 1B A→1S | 1 B→0S | 0解:首先得正规式方程组: S=0A+1B A=1S+1 B=0S+0 求解该方程组得: S=(01|10)(01|10)* 五、 已知文法G(E): (2分)是文法G[S]的句型。
E→T | E+T | E-T 短语:E+T*F, T*F (2分)T→F | T*F | T/F 直接短语:T*F (2分)F→(E) | I 句柄:T*F (2分)证明E+T*F是该文法的一个句型,并指出该句型的所有短语、直接短语和句柄8分)1. 何谓二义性文法?试举一例说明5%)答:若文法G的一个句子对应有两棵或两棵以上不同的推导树,则称该句子是二义性的产生二义性句子的文法称为二义性文法,否则该文法是无二义性的 例子:给定文法G[
(×)5.每个文法都能改写为 LL(1) 文法 (√)6.递归下降法允许任一非终极符是直接左递归的 (√)7.算符优先关系表不一定存在对应的优先函数 (×)8.自底而上语法分析方法的主要问题是候选式的选择 (×)9.LR 法是自顶向下语法分析方法 (×)10.简单优先文法允许任意两个产生式具有相同右部 (×)二、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分)1. 一个编译程序中,不仅包含词法分析,_____,中间代码生成,代码优化,目标代码生成等五个部分 A.( ) 语法分析 B.( )文法分析 C.( )语言分析 D.( )解释分析2. 词法分析器用于识别_____ A.( ) 字符串 B.( )语句 C.( )单词 D.( )标识符3. 语法分析器则可以发现源程序中的_____ A.( ) 语义错误 B.( ) 语法和语义错误 C.( ) 错误并校正 D.( ) 语法错误4. 下面关于解释程序的描述正确的是_____ (1) 解释程序的特点是处理程序时不产生目标代码 (2) 解释程序适用于 COBOL 和 FORTRAN 语言 (3) 解释程序是为打开编译程序技术的僵局而开发的 A.( ) (1)(2) B.( ) (1) C.( ) (1)(2)(3) D.( ) (2)(3)5. 解释程序处理语言时 , 大多数采用的是_____方法。
A.( ) 源程序命令被逐个直接解释执行 B.( ) 先将源程序转化为中间代码 , 再解释执行 C.( ) 先将源程序解释转化为目标程序 , 再执行 D.( ) 以上方法都可以6. 编译过程中 , 语法分析器的任务就是_____ (1) 分析单词是怎样构成的 (2) 分析单词串是如何构成语句和说明的 (3) 分析语句和说明是如何构成程序的 (4) 分析程序的结构 A.( ) (2)(3) B.( ) (2)(3)(4) C.( ) (1)(2)(3) D.( ) (1)(2)(3)(4)7. 编译程序是一种_____ A. ( ) 汇编程序 B.( ) 翻译程序 C.( ) 解释程序 D.( ) 目标程序8. 文法 G 所描述的语言是_____的集合 A. ( ) 文法 G 的字母表 V 中所有符号组成的符号串 B.( ) 文法 G 的字母表 V 的闭包 V* 中的所有符号串 C.( ) 由文法的开始符号推出的所有终极符串 D. ( ) 由文法的开始符号推出的所有符号串9. 文法分为四种类型,即0型、1型、2型、3型。
其中3型文法是_____ A. ( ) 短语文法 B.( ) 正则文法 C.( ) 上下文有关文法 D.( ) 上下文无关文法10. 一个上下文无关文法 G 包括四个组成部分,它们是:一组非终结符号,一组终结符号,一个开始符号,以及一组 _____ A.( ) 句子 B.( ) 句型 C.( ) 单词 D.( ) 产生式2.文法分为四种类型,即0型、1型、2型、3型其中0型文法是_____ A. ( ) 短语文法 B.( ) 正则文法 C.( ) 上下文有关文法 D.( ) 上下文无关文法3.一个上下文无关文法 G 包括四个组成部分,它们是:一组非终结符号,一组终结符号,一个开始符号,以及一组 _____ A.( ) 句子 B.( ) 句型 C.( ) 单词 D.( ) 产生式4._____是一种典型的解释型语言 A.( ) BASIC B.( ) C C.( ) FORTRAN D.( ) PASCAL5.与编译系统相比,解释系统_____ A.( ) 比较简单 , 可移植性好 , 执行速度快 B.( ) 比较复杂 , 可移植性好 , 执行速度快 C.( ) 比较简单 , 可移植性差 , 执行速度慢 D.( ) 比较简单 , 可移植性好 , 执行速度慢 6.用高级语言编写的程序经编译后产生的程序叫_____。
A.( ) 源程序 B.( ) 目标程序 C.( ) 连接程序 D.( ) 解释程序7.词法分析器用于识别_____ A. ( ) 字符串 B.( ) 语句 C.( ) 单词 D.( ) 标识符 8.编写一个计算机高级语言的源程序后 , 到正式上机运行之前,一般要经过_____这几步: (1) 编辑 (2) 编译 (3) 连接 (4) 运行 A. ( ) (1)(2)(3)(4) B.( ) (1)(2)(3) C.( ) (1)(3) D.( ) (1)(4)9.把汇编语言程序翻译成机器可执行的目标程序的工作是由_____完成的 A.( ) 编译器 B.( ) 汇编器 C.( ) 解释器 D.( ) 预处理器10.文法 G 所描述的语言是_____的集合 A. ( ) 文法 G 的字母表 V 中所有符号组成的符号串 B.( ) 文法 G 的字母表 V 的闭包 V* 中的所有符号串 C.( ) 由文法的开始符号推出的所有终极符串 D. ( ) 由文法的开始符号推出的所有符号串三、填空题(每空1分,共10分)1.编译程序的工作过程一般可以划分为词法分析,语法分析,语义分析,中间代码生成,代码优化等几个基本阶段,同时还会伴有__表格处理___和 ___出错处理__。
2.若源程序是用高级语言编写的,___目标程序__是机器语言程序或汇编程序,则其翻译程序称为 ___编译程序__ 3.编译方式与解释方式的根本区别在于__是否生成目标代码___4.对编译程序而言,输入数据是___源程序__, 输出结果是__目标程序___5.产生式是用于定义___语法成分__的一种书写规则 6.语法分析最常用的两类方法是___自上而下__和___自下而上__分析法 1.语法分析是依据语言的__语法___规则进行的,中间代码产生是依据语言的__语义___规进行的2.语法分析器的输入是__单词符号串___,其输出是__语法单位___3.一个名字的属性包括__类型___和__作用域___5.逆波兰式 ab+c+ d*e- 所表达的表达式为__(a+b+c)*d-e___ 1.词法分析基于__正则___文法进行,即识别的单词是该类文法的句子 2.语法分析基于__上下文无关___文法进行,即识别的是该类文法的句子语法分析的有效工具是__语法树___3.分析句型时,应用算符优先分析技术时,每步被直接归约的是__最左素短语___,而应用LR分析技术时,每步被直接归约的是___句柄__。
4.语义分析阶段所生成的与源程序等价的中间表示形式可以有__逆波兰___、___四无式表示__与___三元式表示__等5.按Chomsky分类法,文法按照___规则定义的形式__进行分类 6.一个文法能用有穷多个规则描述无穷的符号串集合(语言)是因为文法中存在有___递归__定义的规则 四、简答题(20分)1. 什么是句子? 什么是语言 ? 答:(1)设G是一个给定的文法,S是文法的开始符号,如果S x(其中x∈VT*),则称x是文法的一个句子 (2)设G[S]是给定文法,则由文法G所定义的语言L(G)可描述为: L(G)={x│S x,x∈VT*} 参考答案:(每个2分,共4分)答:(1)设G是一个给定的文法,S是文法的开始符号,如果S x(其中x∈VT*),则称x是文法的一个句子 (2)设G[S]是给定文法,则由文法G所定义的语言L(G)可描述为: L(G)={x│S x,x∈VT*} 2. 写一文法,使其语言是偶正整数的集合,要求: (1)允许0打头; (2) 不允许0打头解:(1)G[S]=({S,P,D,N},{0,1,2,…,9},P,S) P: S->PD|D P->NP|N D->0|2|4|6|8 N->0|1|2|3|4|5|6|7|8|9 (2)G[S]=({S,P,R,D,N,Q },{0,1,2,…,9},P,S) P: S->PD|P0|D P->NR|N R->QR|Q D->2|4|6|8 N->1|2|3|4|5|6|7|8|9 Q->0|1|2|3|4|5|6|7|8|9 3. 已知文法 G[E] 为: E→T|E+T|E-T T→F|T*F|T/F F→ ( E ) |i ① 该文法的开始符号(识别符号)是什么? ② 请给出该文法的终结符号集合 VT 和非终结符号集合 VN 。
③ 找出句型 T+T*F+i 的所有短语、简单短语和句柄解:① 该文法的开始符号(识别符号)是E ②该文法的终结符号集合VT={+、-、*、/、(、)、i} 非终结符号集合VN={E、T、F} ③句型T+T*F+I的短语为i、T*F、第一个T、T+T*F+i; 简单短语为i、T*F、第一个T;句柄为第一个T4. 构造正规式相应的 NFA : 1(0|1)*101 解1(0|1)*101对应的NFA为 5. 写出表达式(a+b*c)/(a+b)-d的逆波兰表示和三元式序列逆波兰表示: abc*+ab+/d- 三元式序列: ① (*,b,c) ② (+,a,①) ③ (+,a,b) ④ (/,②,③) ⑤ (-,④,d)五.计算题(10分)构造下述文法 G[S] 的自动机: S->A0 A->A0|S1|0 该自动机是确定的吗?若不确定,则对它确定化解:由于该文法的产生式S->A0,A->A0|S1中没有字符集VT的输入,所以不是确定的自动机 要将其他确定化,必须先用代入法得到它对应的正规式把S?A0代入产生式A?S1有:A=A0|A01|0=A(0|01)|0=0(0|01)*。
代入S->A0有该文法的正规式:0(0|01)*0,所以,改写该文法为确定的自动机为: 由于状态A有3次输入0的重复输入,所以上图只是NFA,下面将它确定化: 下表由子集法将NFA转换为DFA: 由上表可知DFA为:四、简答题(20分)1. 文法 G[S] 为: S->Ac|aB A->ab B->bc 写出 L(G[S]) 的全部元素解:S=>Ac=>abc 或S=>aB=>abc 所以L(G[S])={abc}2. 构造正规式 1(0|1)*101 相应的DFA解:先构造NFA: 确定化: 重新命名,令AB为B、AC为C、ABY为D得: 所以,可得DFA为: 3. 文法 S->a|^|(T) T->T,S|S 对 (a,(a,a) 和 (((a,a),^,(a)),a) 的最左推导解: 对(a,(a,a)的最左推导为: S=>(T) =>(T,S) =>(S,S) =>(a,S) =>(a,(T)) =>(a,(T,S)) =>(a,(S,S)) =>(a,(a,S)) =>(a,(a,a)) 对(((a,a),^,(a)),a) 的最左推导为: S=>(T) =>(T,S) =>(S,S) =>((T),S) =>((T,S),S) =>((T,S,S),S) =>((S,S,S),S) =>(((T),S,S),S) =>(((T,S),S,S),S) =>(((S,S),S,S),S) =>(((a,S),S,S),S) =>(((a,a),S,S),S) =>(((a,a),^,S),S) =>(((a,a),^,(T)),S) =>(((a,a),^,(S)),S) =>(((a,a),^,(a)),S) =>(((a,a),^,(a)),a)4. 文法: S->MH|a H->LSo| ε K->dML| ε L->eHf M->K|bLM 判断 G 是否为 LL(1) 文法,如果是,构造 LL(1) 分析表。
解:各符号的FIRST集和FOLLOW集为: 预测分析表为: 由于预测分析表中无多重入口,所以可判定文法是LL(1)的五.计算题(10分)已知文法 G[S] 为: S->a|^|(T) T-> T,S|S (1) 计算 G[S] 的 FIRSTVT 和 LASTVT (2) 构造 G[S] 的算符优先关系表并说明 G[S] 是否未算符优先文法 (3) 计算 G[S] 的优先函数 (4) 给出输入串 (a,a)# 的算符优先分析过程解:(1)各符号的FIRSTVT和LASTVT:(2)算符优先关系表: (3)对应的算符优先函数为: (4)句子(a,a)#分析过程如下: 。