1、编译原理上海交通大学期末考试上海交通大学期末考试编译原理试题及答案一、对于文法 GS :S 1A | 0B | A 0S | 1AA B 1S | 0BB (3 分 ) 请写出三个关于 GS 的句子; (4 分 ) 符号串 11A0S 是否为 G S 的句型?试证明你的结论。 (3 分 ) 试画出 001B 关于 G S 的语法树。二、请构造一个文法,使其产生这样的表达式 E :表达式中只含有双目运算符 + 、 * ,且 + 的优先级高于 * , + 采用右结合, * 采用左结合,运算对象只有标识符 i ,可以用括号改变运算符优先级。要求给出该文法的形式化描述。三、设有语言 L= | 0,1
2、+ ,且 不以 0 开头,但以 00 结尾 。试写出描述 L 的正规表达式;构造识别 L 的 DFA (要求给出详细过程, 并画出构造过程中的 NDFA 、 DFA 的状态转换图,以及 DFA 的形式化描述 ) 。四、给定文法 GS :SABA aB | bS | cB AS | d (6 分 ) 请给出每一个产生式右部的 First 集; (3 分 ) 请给出每一个非终结符号的 Follow 集; (8 分 ) 请构造该文法的 LL(1) 分析表; (8 分 ) 什么是 LL(1) 文法?该文法是 LL(1) 文法吗?为什么?五、给定文法 GS :S SaA|aA AbS|b请构造该文法的以
3、 LR(0) 项目集为状态的识别规范句型活前缀的 DFA 。请构造该文法的 LR(0) 分析表。什么是 LR(0) 文法?该文法是 LR(0) 文法吗?为什么?什么是 SLR(1) 文法?该文法是 SLR(1) 文法吗?为什么?六、给定下列语句:ifa+bcthen x := a*(b-c) + (b*c-d)/e写出其等价的逆波兰表示;写出其等价的四元式序列。七、已知下列 C 语言程序:int * f()int a = 100; return&a;main()int * i = f();char a = “ compiler ” ; printf( “the result is %dn ”
4、, *i);1程序运行结果为: the result is 26157,请解释为什么程序运行的结果不是期望的“ the result is 100 ”?1.1 三个 0 和 1 数量相等的串1.2 S =1A = 11AA =11A 0S1.3第二题构造文法如下 :GE=(+,*,(,),i, E,F,T, P, E) ,其中 P 为:EE*F|F F T+F|T T (E)|i第三题( 1 )正规表达式: 1(0|1) * 00( 2 )第一步:将正规表达式转换为 NDFA第二步:将 NDFA确定化为 DFA:造表法确定化(3分)确定化后DFA M的状态转换表 (2分 )状态输入I 0I 1
5、t01SA,D,Bq 0q 1A,D,BD,B,CD,B重新命名q 1q 2q 3D,B,CD,B,C,ZD,Bq 2q 4q 32D,BD,B,CD,Bq 3q 2q 3D,B,C,ZD,B,C,ZD,Bq 4q 4q 3DFA 的状态转换图( 3分)第三步:给出 DFA 的形式化描述DFA M = ( q 0 , q 1 , q 2 , q 3 , q 4 , 0,1, t, q 0 , q 4 )t 的定义见 M 的状态转换表。第四题( 1 ) First(AB) = a, b, c First(aB) = aFirst(bS) = bFirst(c) = cFirst(AS) = a,
6、 b, cFirst(d) = d( 2 ) Follow(S) = #, a, b, c, d Follow(A) = a, b, c, dFollow(B) = #, a, b, c, d( 3 ) LL(1) 分析表( 8 分)V NV Tabcd#SS?ABS?ABS?ABAA ?aBA ?bSA ? CBB?ASB?ASB?ASB ? d3( 4 )对于文法 G 的每一个非终结符 U 的产生式 U ? 1 | 2 | | n,如果 SELECT(U ? i ) ? SELECT(U ? j ) = ? (i j, i,j=1, 2, , n),则文法 G 是一个 LL(1) 文法。该
7、文法是 LL(1) 文法。因为 SELECT(A ? aB) ? SELECT(A ? bS) ? SELECT(A ? C) = ?SELECT(B ? AS) ?SELECT(B ? d) = ?第五题拓广文法 1 分GS :SSS SaA S a A AbS A b 该文法的以 LR(0) 项目集为状态的识别规范句型活前缀的 DFA :该文法的LR(0)分析表:状态ACTIONGOTOab#SA0S 211S 3acc2r 3r 3r 33S 544r 2r 2 /S 6r 25r 5r 5r 56S 277r 4 /S 3r 4r 4 LR(0)文法:该文法的以LR(0) 项目集为状态
8、的识别规范句型活前缀的DFA 中没有冲突状态。该文法不是LR(0)文法4因为存在冲突状态: I4 和 I7 SLR(1) 文法:该文法的以 LR(0) 项目集为状态的识别规范句型活前缀的 DFA 中有冲突状态,冲突可用 FOLLOW 集解决。该文法不是 SLR(1) 文法。因为 FOLLOW(S)=a,b,# ,所以无法解决冲突第六题( 1 ) (1) ab+c (23) jumpf(8) xabc-*bc*d-e/+:=(23) .( 2 )第七题C 语言采用栈式存储分配方法作为其运行环境;f() 返回的是指向其活动记录某一位置的指针;f() 返回后,其活动记录被释放,并且,其对应的存储空间
9、被数组 a 占用,再次引用该指针时,其结果由于对回收的活动记录所占用的内存空间的再分配,其所指的值发生了改变。释放在前,引用在后的现象称 : Dangling Reference 。5历年试题及答案一 (每项选择 2 分,共 20 分)选择题1将编译程序分成若干个 “遍 ”是为了 _。a.提高程序的执行效率b.使程序的结构更加清晰c.利用有限的机器内存并提高机器的执行效率d.利用有限的机器内存但降低了机器的执行效率2构造编译程序应掌握 _。a.源程序 b.目标语言c.编译方法 d.以上三项都是3变量应当。a.持有左值 b.持有右值c.既持有左值又持有右值 d.既不持有左值也不持有右值4编译程序
10、绝大多数时间花在 _上。a.出错处理 b.词法分析c.目标代码生成 d.管理表格5词法分析器的输出结果是 _。a.单词的种别编码 b.单词在符号表中的位置c.单词的种别编码和自身值 d.单词自身值6正规式 MI 和 M2 等价是指 _ 。a. MI 和 M2 的状态数相等 b.Ml 和 M2 的有向弧条数相等。C.M1 和 M2 所识别的语言集相等 d. Ml 和 M2 状态数和有向弧条数相等7中间代码生成时所依据的是 。a语法规则 b词法规则 c语义规则 d等价变换规则8后缀式 ab+cd+/ 可用表达式 _来表示。a a+b/c+d b (a+b)/(c+d) c a+b/(c+d) d
11、a+b+c/d9程序所需的数据空间在程序运行前就可确定,称为 _管理技术。a.动态存储 b.栈式存储 c.静态存储 d.堆式存储10.堆式动态分配申请和释放存储空间遵守 _原则。a.先请先放 b.先请后放 c.后请先放 d.任意二(每小题 10 分,共 80 分)简答题1.画出编译程序的总体结构图,简述各部分的主要功能。2. 已知文法 GE:E ET+|T T TF* | F F F | a试证: FF* 是文法的句型,指出该句型的短语、简单短语和句柄 .3为正规式 (a|b) *a(a|b) 构造一个确定的有限自动机。4 设文法 G(S):S (L)|a S|aLL, S|S(1) 消除左递
12、归和回溯;6(2) 计算每个非终结符的 FIRST 和 FOLLOW ;(3) 构造预测分析表。5 已知文法A- aAd| aAb| 判断该文法是否 SLR ( 1)文法,若是构造相应分析表,并对输入串 ab#给出分析过程。6 构造算符文法 GH 的算符优先关系(含) 。GH : H H;M|MM d|aHb7已构造出文法 G( S)( 1)S BB( 2) B aB( 3) Bb1)。给出 DFA 图2) .给出 LR 分析表3)假定输入串为 abaab,请给出 LR 分析过程(即状态,符号,输入串的变化过程) 。8 将下面的语句翻译成四元式序列:while AC BA (1) A-aAd
13、(2)A-aAb (3)A- (2) 构造识别活前缀的 DFAFOLLOW(A)=d,b,#对于状态I0:FOLLOW(A)a= 对于状态I1:FOLLOW(A)a= 因为,在 DFA 中无冲突的现象,所以该文法是SLR(1) 文法。(3)SLR(1) 分析表状态ACTIONGOTOaBd#A0S2r3r3r311acc2S2r3r3r3383S5S44r1r1r15r2r2r2(4) 串 ab#的分析过程步骤状态栈符号栈当前字符剩余字符串动作10#ab#移进202#ab#归约 A- 3023#aAb#移进40235#aAb#归约 A-aAb501#A#接受6 【解答】由 Md 和 M a 得
14、: FIRSTVT(M)= d,a;由 H- H; 得: FIRSTVT(H)= ;由 HM 得: FIRSTVT(M) cFIRSTVT(H) ,即 FIRSTVT(H)=;,d,a由 Md 和 Mb 得: LASTVT(M)=d,b ;由 H- ,;m 得: LASTVT(H)= ;由 HM 得: LASTVT ( M )cLASTVT(H ),即 LASTVT(H)= ;,d,b对文法开始符 H,有 #H#存在,即有 =, #, 也即;, #d. #, b# 。对形如 P ab,或 P aQb,有 a=b,由 M a|b 得: a=b;对形如 P aR,而 b FIRSTVT(R) ,有
15、 ab。由 H ; M 得:; FIRSTVT(M) ,即:d,: a由 M aH 得: aFIRSTVT(H) ,即: a;, a; ,即:;, d;, b;由 M Hb 得: LASTVT(H)b ,即:; b, db, b b由此得到算符优先关系表,见表 3.5。7 【解答】( 1) LR 分析表如下:( 2)分析表状态ACTIONGOTOab#SB0s3s4121acc2S3S453s3s464r3r35R1R1r16R2R2R29(3) 句子 abaab 的分析过程表: 句子 abaab 的分析过程步骤状态符号栈输入串所得产生式0#0#abaad#1#03#abaad#2#034#a
16、baab#Bb3#036#aBaab#B aB4#02#Baab#5#023#Baab#6#0233#Baab#7#02334#Baab#8#02336#BaaB#9#0236#BaBad#10#025#BBad#11#01#Sd#12#d#13 识别成功8【解答】该语句的四元式序列如下(其中E1、 E2 和 E3 分别对应: AC BD, A=1 和 AD并且关系运算符优先级高) :100(j,A,C,102)101(j,_,_,113 )/*E1为 F*/102(j2, 4-3(3) 求出流图中的循环 :回边 5-2 对应的循环: 2、 5、 3、4;回边 4-3 对应的循环: 3、 41
17、0参考答案一、单项选择题 (共 10 小题,每小题 2 分,共 20 分 )1语言是A 句子的集合 B产生式的集合C符号串的集合 D 句型的集合2编译程序前三个阶段完成的工作是A 词法分析、语法分析和代码优化装 B代码生成、代码优化和词法分析C词法分析、语法分析、语义分析和中间代码生成订 D词法分析、语法分析和代码优化3一个句型中称为句柄的是该句型的最左A 非终结符号B短语C句子 D 直接短语线4下推自动机识别的语言是A0 型语言B 1 型语言C2 型语言D 3 型语言5扫描器所完成的任务是从字符串形式的源程序中识别出一个个具有独立含义的最小语法单位即A 字符 B单词 C句子 D句型6对应 C
18、homsky 四种文法的四种语言之间的关系是AL0 L1 L2 L3BL3 L2 L1 L0CL3=L2 L1 L0 DL0 L1 L2=L37词法分析的任务是A 识别单词 B分析句子的含义C识别句子 D 生成目标代码8常用的中间代码形式不含A 三元式 B 四元式 C逆波兰式 D 语法树9代码优化的目的是A 节省时间 B 节省空间C节省时间和空间 D把编译程序进行等价交换10代码生成阶段的主要任务是A 把高级语言翻译成汇编语言11B 把高级语言翻译成机器语言C把中间代码变换成依赖具体机器的目标代码D把汇编语言翻译成机器语言二、填空题(本大题共 5 小题,每小题 2 分,共 10 分)1编译程序
19、首先要识别出源程序中每个 ( 单词 ),然后再分析每个 (句子 )并翻译其意义。2编译器常用的语法分析方法有 (自底向上 )和 ( 自顶向下 )两种。3通常把编译过程分为分析前端与综合后端两大阶段。词法、语法和语义分析是对源程序的( 分析 ),中间代码生成、代码优化与目标代码的生成则是对源程序的 (综合 )。4程序设计语言的发展带来了日渐多变的运行时存储管理方案,主要分为两大类,即 (静态存储分配 )方案和 (动态存储分配 )方案。5对编译程序而言,输入数据是 (源程序 ),输出结果是 (目标程序 )。三、名词解释题 (共 5 小题,每小题 4 分,共 20 分)1词法分析词法分析的主要任务是从左向右扫描每行源程序的符号,按照词法规则从
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1