




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编 译 原 理 练 习 题 答 案第一阶段一、选择题(每个选择题 2 分,共 20 分) 1 文法 G 产生的 的全体是该文法描述的语言。 A 句型 B. 终结符集 C. 非终结符集 D. 句子 2 若文法 G 定义的语言是无限集,则文法必然是 : A 递归的 B 前后文无关的 C 二义性的 D 无二义性的 3 Chomsky 定义的四种形式语言文法中, 0 型文法又称为 文法; 1 型文法又称为 文法; 2 型语言可由 识别。 A 短语结构文法 B 前后文无关文法 C 前后文有关文法 D 正规文法 E 图灵机 F 有限自动机 G 下推自动机 4 一个文法所描述的语言是 ;描述一个语言的文法是 。 A 唯一的 B 不唯一的 C 可能唯一,好可能不唯一 5 数组的内情向量中肯定不含有数组的 的信息 A维数 B.类型 C.维上下界 D.各维的界差 6 在下述的编译方法中,自底向上的方法有 ,自顶向下的分析方法有 。 简单优先分析 算符优先分析 递归下降分析 预测分析技术 LR(K)分析 SLR(k)分析 LL(k)分析 LALR(K)分析 A. B. C. D. E. F. 二、简答题(每小题 5 分,共 20 分) 1 LL ( 1 )分析法对文法有哪些要求? 2 常见的存储分配策略有几种?它们都适合于什么性质的语言? 3 常见循环优化都有哪些项目? 4 什么是活动记录?它主要由哪些内容构成? 三、( 8 分)化简文法 GS : S ASe | BCaD | aD | AC A Cb | DBS C bC | d B Ac D aD 四、( 12 分) 设 L a,b,c* 是满足下述条件的符号串构成的语言: (1)若出现 a ,则其后至少紧跟两个 c ; (2)若出现 b ,其后至少紧跟一个 c 。 试构造识别 L 的最小化的 DFA ,并给出描述 L 的正规表达式。 五、( 12 分) 已给文法 GS : S SaP | Sf | P P qbP | q 将 GS 改造成 LL ( 1 )文法,并给出 LL ( 1 )分析表。 六、( 12 分) 给定文法 GS : S Aa|dAb|Bb|dBa A c B c 构造文法 GS 的 LR ( 1 )分析表。 七、( 8 分) 将下面的条件语句表示成逆波兰式和四元式序列: if ab then x:=a+b*c else x:=b-a; 八、( 8 分) 给定基本块: A:=3*5 B:=E+F C:=A+12 D:=E+F A:=D+12 C:=C+1 E:=E+F 假定出基本块后,只有 A 、 C 、 E 是活跃的,给出用 DAG 图完成优化后的代码序列。 参考答案: 一、 D A A C G. A B A F A 二、 1 对于 G 中的每个产生式 A 1 | 2 | | m ,其各候选式均应满足: (1)不同的候选式不能推出以同一终结符号打头的符号串,即 FIRST( i ) FIRST( j )= ( 1 i , j m ; i j ) (2)若有 j ,则其余候选式 i 所能推出的符号串不能以 FOLLOW(A) 中的终结符号开始,即有 FIRST( i ) FOLLOW(A)= ( i 1,2, ,m ; i j ) 2 有三种分配存储空间的方式:( 1 ) 静态分配 若在编译阶段就能确定源程序中各个数据实体的存储空间大小,则可以采用较简单的静态存储管理。 适合 静态管理 的语言应具备条件: 数组上下界是常数、过程调用不允许递归、不允许动态建立数据实体。 ( 2) 栈式分配 适用于允许递归调用的程序设计语言 ;( 3 ) 堆式分配 对于允许程序在运行时为变量 动态申请和释放存储空间 的语言 , 采用 堆式分配 是最有效的解决方案 。 3 不变运算外提;运算强度削弱;消除归纳变量;下标变量地址计算优化。 4 一个过程的一次执行所需信息的管理,是通过称为 活动记录 的连续存储块来实现的。活动记录的主要内容有:( 1) 临时变量域 存放目标程序临时变量的值;( 2 )局部数据域 存放过程本次执行时的局部数据、简单变量及数组内情向量等;( 3 )机器状态域 保存在调用过程前有关机器状态的信息,包括各寄存器的当前值及返回地址等;( 4 )存取链 为访问其它活动记录中所存放的非局部数据所提供的链地址;( 5 )控制链 指向主调过程的活动记录;( 6 )实参 存放主调过程为被调用过程所提供的实参信息;( 6 )返回值 为主调过程存放被调过程的返回值 三、化简后: S ASe|AC A Cb C bC | d 四、 DFA 如图所示。相应的正规式为 (c|acc|bc)* 。 五、 改造后的文法: S PS S aPS| fS | e P qP P bP | e 各候选式的 FIRST 集,各非终结符的 FOLLOW 集为 产生式 FIRST 集 FOLLOW 集 S PS q # S aPS fS e a f e # P qP q a,f,# P bP e b e a,f,# LL(1) 分析表为 六、分析表如下图所示 七、( 1 )逆波兰式: ,其中, BLE 表示汪或等于时的转向指令; 表示标号。 ( 2 )四元式: (1) ( j, a, b, (3) (2) ( j, , , (7) ) (3) ( *, b, c, T1) (4) ( +, a, T1, T2) (5) ( :=, T2, , x) (6) ( j, , , (9) (7) ( -, b, a, T3) (8) ( :=, T3, , x) (9) ( ) 八、化简后的的四元式序列为 A :=D+12 E :=E+F C :=28 第二阶段一、是非题(下列各题,你认为正确的,请在题干的括号内打“”,错的打“”。每题1分,共5分) 1、算符优先关系表不一定存在对应的优先函数。 2、数组元素的地址计算与数组的存储方式有关。3、仅考虑一个基本块,不能确定一个赋值是否真是无用的。4、每个文法都能改写为LL(1)文法。5、对于数据空间的存贮分配,FORTRAN采用动态贮存分配策略。二、填空题(每题2分,共20分) 1、从功能上说,程序语言的语句大体可分为_语句和_语句两大类。 2、扫描器的任务是从_中识别出一个个_。 3、所谓最右推导是指:_。 4、语法分析最常用的两类方法是_和_分析法。 5、一个上下文无关文法所含四个组成部分是_。 6、所谓语法制导翻译方法是_。 7、符号表中的信息栏中登记了每个名字的有关的性质,如_等等。 8、一个过程相应的DISPLAY表的内容为_。 9、常用的两种动态存贮分配办法是_动态分配和_动态分配。 10、产生式是用于定义_的一种书写规则。 三、名词解释(每题2分,共10分) 1、遍 2、无环路有向图(DAG) 3、语法分析 4、短语 5、后缀式四、简述题(每题4分,共24分) 1、考虑下面程序 Var a:integer; Procedure S(X); Var X:integer; Begin a:a1; X:aX End; Begin a:5; S(a); Print(a) End 试问:若参数传递方式分别采取传名和传值时,程序执行后输出a的值是什么? 2、画出Pascal中实数(不带正负号,可带指数部分)的状态转换图。 3、写出表达式(ab*c)/(ab)d的逆波兰表示及三元式序列。 4、已知文法G(S) Sa|(T) TT,S|S 写出句子(a,a),a)的规范归约过程及每一步的句柄。 5、何谓优化?按所涉及的程序范围可分为哪几级优化? 6、目标代码有哪几种形式?生成目标代码时通常应考虑哪几个问题? 五、计算题(共41分) 1、写一个文法,使其语言是奇数集,且每个奇数不以0开头。(5分) 2、设文法G(S): S(L)|a S|a LL,S|S (1)消除左递归和回溯; (2)计算每个非终结符的FIRST和FOLLOW; (3)构造预测分析表。 3、Whilea0 b0do Begin X:X1; if a0 then a:a1 else b:b1 End; 翻译成四元式序列。(7分) 4、已知文法G(E) ET|ET TF|T *F F(E)|i (1)给出句型(T *Fi)的最右推导及画出语法树; (2)给出句型(T *Fi)的短语、素短语。(7分) 5、设布尔表达式的文法为 E E(1)E(2) E E(1)E(2) E i 假定它们将用于条件控制语句中,请 (1)改写文法,使之适合进行语法制导翻译和实现回填; (2)写出改写后的短个产生式的语义动作。(6分) 6、设有基本块 T1:2 T2:10/T T3:SR T4:SR A:T2 *T4 B:A T5:SR T6:T3 *T5 B:T6 (1)画出DAG图; (2)假设基本块出口时只有A,B还被引用,请写出优化后的四元序列。(6分)第二阶段参考答案: 一、 二、 1 执行性、 说明性 2、 源程序、 单词符号 3、 任何一步都是对中最右非终结符进行替换的 4 自上而下、 自下而上 5、 一组终结符号,一组非终结符号、一个开始符号、一组产生式 6、 为每个产生式配上一个翻译子程序,并在语法分析的同时执行这些子程序 7、 类型、种属、所占单元大小、地址 8、 现行活动记录地址和所有外层最新活动记录的地址 9、 栈式、 堆式 10、 语法范畴 三、名词解释1遍指编译程序对源程序或中间代码程序从头到尾扫描一次。 2无环路有向图(DAG)如果有向图中任一通路都不是环路,则称庐有向图为 无环路有向图,简称DAG。 3语法分析按文法的产生式识别输入的符号串是否为一个句子的分析过程。 4短语令G是一个文法。S划文法的开始符号,假定是文法G的一个句 型,如果有SA且AB,则称是句型相对非终结符A的短语。 5后缀式一种把运算量写在前面,把算符写在后面的表示表达式的方法。 四、简述题1、答:传名:a12(2分) 传值:a6 (2分) 3、答:逆波兰表示: abc*ab/d(2分) 三元式序列: (*,b,c) (,a,) (,a,b) (/,) (,d)(2分) 4、答: 句型归约规则句柄 (a,a),a)Saa (S,a),a)TSS (T,a),a)Saa (T,S),a)TT,S T,S (S),a) TSS (T),a) SS(T) (T) (S,a) TSS (T,a) Saa (T,S) TT,S T,S (T) S(T)(T) S(4分) 5、 答:优化:对程序进行各种等价变换,使得从变换后的程序出发,能产生更有效的目标代码。(2分) 三种级别:局部优化、循环优化、全局优化。(2分) 6、 答:目标代码通常采用三种形式:机器语言,汇编语言,待装配机器语言模块。(2分) 应着重考虑的问题: (1)如何使生成的目标代码较短; (2)如何充分利用寄存器,以减少访问内存次数; (3)如何充分利用指仅系统的的特点。 (2分)五、计算题 1、解:文法G(N): NAB|B AAC|D B1|3|5|7|9 DB|2|4|6|8 C0|D(5分) 2、解:(1) S(L)|aS SS| LSL LSL| 评分细则:消除左递归2分,提公共因子2分。 (2) FIRST)S)(,aFOLLOW(S)#,) FIRST(S),a,FOLLOW(S)#,) FIRST(L)(,aFOLLOW(L) ) FIRST(L),FOLLOW(L ) 3、解: (1) (j,a,0,5) (2) (j,3) (5) (,1,T1) (6) (:,T1,) (7) (j,a,0,9) (8) (j,12) (9) (,a,1,T2) (10) (:,T2,a) (11) (j,1) (12) (,b,1, T3) (13) (:,T3,b) (14) (j,1) (15) 4、解:(1) 最右推导: ETF(E)(ET)(EF)(Ei) (Ti)(T*Fi) (2) 短语:(T*Fi),T*Fi,T*F,i(2分) 素短语:T*F,i (1分) 5、解:(1) E0E(1) EE0E(2) EAE(1) EEAE(2) Ei(3分) (2) EE(1) BACKPATCH(E(1)FC,NXQ); E0TC:E(1)TC EE0E(2) EFC:E(2)FC; ETC:MERG(E0TC,E(2)TC) EAE(1) BACKPATCH(E(1)TC,NXQ); E0FC:E(1)FC EEAE(2) ETC:E(2)TC; EFC:MERG(EAFC,E(2)FC Ei ETC:NXQ;EFC:NXQ1; GEN(jn2,entry(i),0); GEN(j,0)(3分) 第三阶段一、简答题(15分)1. 编译程序与解释程序有何区别?2. 何谓素短语?3. 过程调用时,主调程序与被调程序之间的信息传递有哪些方式?4. 何谓语法制导翻译?5. 何谓算符文法?二、选择题(10分)1. 描述一个语言的文法是( )A.唯一的 B.不唯一的 C.可能唯一,也可能不唯一2. 若文法G定义的语言是无限集,则文法必然是( )A.前后文无关文法 B.正规文法 C.二义性文法 D.递归文法3. 数组的内情向量中肯定不含数组的( )信息A.维数 B.类型 C.各维的上下界 D.各维的界差4. 简单优先分析每次归约的是( )A. 最左直接短语 B.直接短语 C.最左素短语 D.控制结点5. 最适合动态建立数据实体的内存分配方式是( )A. 栈式分配 B.堆式分配 C.编译时预先分配 D.以上三种均可三、(10分)给定文法G=(S,L,a,(,),S(L)|a LL,S|S,S)。给出句型”(S,(a)”的推导和语法树并指出此句型的所有短语、直接短语、句柄和素短语。四、(12分)设语言L是由奇数个a和偶数(可以是0)个b组成的符号串之集。1.构造识别L的DFA;2. 给出定义L的正规文法;五、(10分)将文法GS:SA AAS|B BBi|i 改写为等价的LL(1)文法,并给出相应的LL(1)分析表。六、(20分)给定文法GS: S(S)|a 1.构造识别文法GS活前缀的LR(1)项目的DFA;2. 构造LR(1)分析表;3. 合并同心集,构造LALR(1)分析表。七、(8分)某语言算术表达式的文法定义为 EE+E|i| if B then E else E其中,第三个候选式称为条件算术表达式,B为布尔表达式,then及else后的E均为算术表达式(即简单算术表达式或条件表达式),其语义为,当B为真时,表达式的值取then后的E的值,否则取else的E的值。假定所有表达式是整型的,试将下面关于条件算术表达式的属性翻译文法填写完全:八、 (8分)给定PASCAL程序语句while ab do if a0 then a:=a-1 else a:=a+1; 1. 将该语句翻译成逆波兰式; 2. 给出编译程序扫描到then处及分号处时所得的四元式序列。九、 (7分)用DAG图对下面的基本块进行优化(假定出基本块后只有A、G、L是活跃的):A=B*C D=B/C E=2*3 F=E+2 G=B*C K=E+F G=K*KL=B/C 第三阶段参考答案一、 简答题(15分)1. 编译程序与解释程序有何区别?答:二者的工作方法不同,后者是边解释边执行,解释所得的代码并不保存;前者是先将高级语言翻译感情上标代码,将其保存到指定的空间中,待需要时再执行之,甚至可以在案一个机器上编译,而在另一台机器上执行。2. 何谓素短语?答:素短语是满足下述条件的短语:(1)它至少含有一个终结符号(2)满足条件(1)的“最小”短语3. 过程调用时,主调程序与被调程序之间的信息传递有哪些方式?答:形式参数与实在参数结合方式传递(简称参数传递)、返回值传递、共享数据区传递。4. 何谓语法制导翻译?答:语法制导翻译是对前后文无关文法的扩充,即对文法中的每个产生式都附加一个语义动作或语义子程序,且在语法分析过程中,每当需要使用一个产生式进行推导或归约时,语法分析程序除执行相应的语法分析动作外,还要执行相应的语义动作或调用相应的语义子程序,完成相应的语义分析和翻译工作。5. 何谓算符文法?答:当一个文法的所有产生式的右部均不出现两个非终结符号相邻的情况时,该就被称为算符文法。二、 选择题(10分)1. 描述一个语言的文法是(B )A.唯一的 B.不唯一的 C.可能唯一,也可能不唯一2. 若文法G定义的语言是无限集,则文法必然是(D )A.前后文无关文法 B.正规文法 C.二义性文法 D.递归文法3. 数组的内情向量中肯定不含数组的(B )信息A.维数 B.类型 C.各维的上下界 D.各维的界差4. 简单优先分析每次归约的是(C )A. 最左直接短语 B.直接短语 C.最左素短语 D.控制结点5. 最适合动态建立数据实体的内存分配方式是(B )A. 栈式分配 B.堆式分配 C.编译
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论