当前位置:文档之家› 编译原理第二章练习题

编译原理第二章练习题

编译原理第二章练习题
编译原理第二章练习题

蒋立源 编译原理第三版第二章 习题与答案(修改后)

第2章习题 2-1 设有字母表A1 ={a,b,c,…,z},A2 ={0,1,…,9},试回答下列问题: (1) 字母表A1上长度为2的符号串有多少个? (2) 集合A1A2含有多少个元素? (3) 列出集合A1(A1∪A2)*中的全部长度不大于3的符号串。 2-2 试分别构造产生下列语言的文法: (1){a n b n|n≥0}; (2){a n b m c p|n,m,p≥0}; (3){a n#b n|n≥0}∪{c n#d n|n≥0}; (4){w#w r# | w∈{0,1}*,w r是w的逆序排列 }; (5)任何不是以0打头的所有奇整数所组成的集合; (6)所有由偶数个0和偶数个1所组成的符号串的集合。 2-3 试描述由下列文法所产生的语言的特点: (1)S→10S0S→aA A→bA A→a (2)S→SS S→1A0A→1A0A→ε (3)S→1A S→B0A→1A A→C B→B0B→C C→1C0C→ε (4)S→aSS S→a 2-4 试证明文法 S→AB|DC A→aA|a B→bBc|bc C→cC|c D→aDb|ab 为二义性文法。 2-5 对于下列的文法 S→AB|c A→bA|a B→aSb|c 试给出句子bbaacb的最右推导,并指出各步直接推导所得句型的句柄;指出句子的全部短语。

2-6 化简下列各个文法 (1) S→aABS|bCACd A→bAB|cSA|cCC B→bAB|cSB C→cS|c (2) S→aAB|E A→dDA|e B→bE|f C→c AB|dSD|a D→eA E→fA|g (3) S→ac|bA A→c BC B→SA C→bC|d 2-7 消除下列文法中的ε-产生式 (1) S→aAS|b A→cS|ε (2) S→aAA A→bAc|dAe|ε 2-8 消除下列文法中的无用产生式和单产生式 (1) S→aB|BC A→aA|c|aDb B→DB|C C→b D→B (2) S→SA|SB|A A→B|(S)|( ) B→[S]|[ ] (3) E→E+T|T T→T*F|F F→P↑F|P P→(E)|i 第2章习题答案 2-1 答: (1) 26*26=676 (2) 26*10=260 (3) {a,b,c,...,z, a0,a1,...,a9, aa,...,az,...,zz, a00,a01,...,zzz},共有26+26*36+26*36*36=34658个 2-2 解: (1) 对应文法为G(S)=({S},{a,b},{ S→ε| aSb },S) (2) 对应文法为G(S)=({S,X,Y},{a,b,c},{S→aS|X,X→bX|Y,Y→cY|ε },S) (3)对应文法为G(S)=({S,X,Y},{a,b,c,d,#}, {S→X,S→Y,X→aXb|#, Y→cYd|# },S)

编译原理各章习题

第二章高级语言及其语法描述 1、设有文法G[S]: S→N N→D|ND D→0|1|2|…|9 试写出028和4321的最左推导和最右推导过程。 2、证明文法G[S]是二义性文法: S→if E then S else S |if E then S |s E→0|1 3、设有文法G[E]: E→E-T|T T→T/F|F F→i|(E) (1)试写出i/(i-i-i)的推导树。 (2)试写出(F-i)/F的短语、简单短语和句柄。 4、设∑={0,1},请给出∑上下列语言的文法(1)所有以0开头的串 (2)所有以0开头,以1结尾的串 5、证明文法G1和G2等价 G1:S→0S1,S→01 G2:A→0R,A→01,R→A1 第三章有限状态自动机和词法分析 1、请用中文描述下列正规式表示的正规集 (1)0(0|1)*0 (2)0*10*10*10* 2、试写出∑={0,1}上下列集合的正则表达式:(1)所有以1开始和结束的符号串。 (2)恰含有3个1的所有符号所组成的集合。(3)集合{01,1}。

(4)所有以111结束的符号串。 3、试写出∑={0,1}上下述集合的正则表达式: (1)试写出非负整数集的正则表达式。 (2)试写出以非5数字为头的所有非负整数集的正则表达式。 4、试将图3.1中所示的有限状态自动机M 最小化。 图3.1 M 的状态转换图 5、设∑={a,b},试构造下述正则表达式的确定性有限状态自动机: (1)a(a|b)*baa (2)(a|b)*bbb * 6、对于下列的状态转换矩阵: (1)分别画出相应的状态转换图。 (2)用自然语言分别描述它们所识别的输入串的特征 7、将图3.2所示的非确定的有限状态自动机确定化和最小化。 图3.2 非确定的有限状态自动机M 第四章 自顶向下语法分析 1、从下列文法中消去左递归。

编译原理第二章-课后题答案

第二章 3.何谓“标志符”,何谓“名字”,两者的区别是什么? 答:标志符是一个没有意义的字符序列,而名字却有明确的意义和属性。 4.令+、*和↑代表加、乘和乘幂,按如下的非标准优先级和结合性质的约定,计算1+1*2↑2*1↑2的值。 (1)优先顺序(从高到低)为+、*和↑,同级优先采用左结合。 (2)优先顺序为↑、+、*,同级优先采用右结合。 答:(1)1+1*2↑2*1↑2=2*2↑2*1↑2=4↑2*1↑2=4↑2↑2=16↑2=256 (2)1+1*2↑2*1↑2=1+1*2↑2*1=1+1*4*1=2*4*1=2*4=8 6.令文法G6为 N-〉D|ND D-〉0|1|2|3|4|5|6|7|8|9 (1)G6的语言L(G6)是什么? (2)给出句子0127、34、568的最左推导和最右推导。 (1)由0到9的数字所组成的长度至少为1的字符串。即:L(G6)={d n|n≧1,d∈{0,1,…,9}} 答: (2)0127的最左推导:N=>ND=>NDD=>NDDD=>DDDD=>0DDD=>01DD=>012D=>0127 0127的最右推导:N=>ND=>N7=>ND7=>N27=>ND27=>N127=>D127=>0127 (其他略) 7.写一个文法,使其语言是奇数集,且每个奇数不以0开头。 答:G(S):S->+N|-N N->ABC|C C->1|3|5|7|9 A->C|2|4|6|8 B->BB|0|A|ε [注]:可以有其他答案。 [常见的错误]:N->2N+1 原因在于没有理解形式语言的表示法,而使用了数学表达式。 8.令文法为 E->T|E+T|E-T T->F|T*F|T/F F->(E)|i (1)给出i+i*i、i*(i+i)的最左推导和最右推导。 (2)给出i+i+i、i+i*i和i-i-i的语法树,并给出短语,简单短语和句柄。 答:(1) i*(i+i)的最左推导: E=>T=>T*F=>F*F=>i*F=>i*(E)=>i*(E+T)=>i*(T+T)=>i*(F+T)=>i*(i+T)=>i*(i+F)=> i*(i+i) i*(i+i)的最右推导: E=>T=>T*F=>T*(E) =>T*(E+T)=>T*(E+F)=>T*(E+i)=>T*(T+i)=>T*(F+i)=> T*(i+i)=> F*(i+i) => i*(i+i) (其他略) [注]:要牢记每一步都是对最左(右)的一个非终结符号进行一步推导。 (2) i+i+i的语法树:

编译原理第1阶段练习题及答案,这是其中一个阶段共3个阶段。答案在后面

江南大学网络教育第一阶段练习题及答案,这是其中一个阶段共3个阶段。答案在后面 考试科目:《编译原理》第章至第章(总分100分) __________学习中心(教学点)批次:层次: 专业:学号:身份证号: 姓名:得分: 一单选题 (共4题,总分值20分,下列选项中有且仅有一个选项符合题目要求,请在答题卡上正确填涂。) 1. 若一个文法是递归的,则它所产生的语言的句子是()。(5 分) A. 无穷多个 B. 有穷多个 C. 可枚举的 D. 个数是常量 2. 文法G[A]:A→ε A→aB B→Ab B→a是()。(5 分) A. 0型文法 B. 1型文法 C. 2型文法 D. 3型文法 3. 词法分析器的输入是()。(5 分) A. 单词符号串 B. 源程序 C. 语法单位 D. 目标程序 4. 一个上下文无关文法 G 包括四个组成部分,它们是:一组非终结符号,一组终结符号,一 个开始符号,以及一组()。(5 分) A. 句子 B. 句型 C. 单词 D. 产生式 二填空题 (共2题,总分值10分 ) 5. 编译程序的功能可以分解为词法分析、语法分析、__________、中间代码生成、中间代码优 化、目标代码生成。(5 分) 6. 微小语言Micro的单词有下面的几种:标识符、__________、实常数、保留字、__________、 换行符。(5 分)

三简答题 (共2题,总分值20分 ) 7. 给出与正规式R=1(0|1)*101等价的NFA。(10 分) 8. 写出下面程序经词法分析后的TOKEN表示。 begin var X:real; var J:integer; read(J); J:=J+(J*20); X:=J-1; Write(2*J+X) End(10 分) 四综合计算题 (共2题,总分值50分 ) 9. 已知文法G(S) S→a| (T) T→T,S|S 写出句子((a,a),a)的规范归约过程及每一步的归约规则和句柄。(25 分)10. 已知文法 G[E] 为: E→T|E+T|E-T T→F|T*F|T/F F→(E)|i ①该文法的开始符号(识别符号)是什么? ②请给出该文法的终结符号集合 Vt 和非终结符号集合 Vn 。 ③找出句型 T+T*F+i 的所有短语、简单短语和句柄。(25 分)

编译原理 第二章习题答案

第2章习题解答 1.文法G[S]为: S->Ac|aB A->ab B->bc 写出L(G[S])的全部元素。 [答案] S=>Ac=>abc 或S=>aB=>abc 所以L(G[S])={abc} ============================================== 2. 文法G[N]为: N->D|ND D->0|1|2|3|4|5|6|7|8|9 G[N]的语言是什么? [答案] G[N]的语言是V+。V={0,1,2,3,4,5,6,7,8,9} N=>ND=>NDD.... =>NDDDD...D=>D......D =============================================== 3.已知文法G[S]: S→dAB A→aA|a B→ε|bB 问:相应的正规式是什么?G[S]能否改写成为等价的正规文法?[答案] 正规式是daa*b*;

相应的正规文法为(由自动机化简来): G[S]:S→dA A→a|aB B→aB|a|b|bC C→bC|b 也可为(观察得来):G[S]:S→dA A→a|aA|aB B→bB|ε ===================================================================== ========== 4.已知文法G[Z]: Z->aZb|ab 写出L(G[Z])的全部元素。 [答案] Z=>aZb=>aaZbb=>aaa..Z...bbb=> aaa..ab...bbb L(G[Z])={a n b n|n>=1} ===================================================================== ========= 5.给出语言{a n b n c m|n>=1,m>=0}的上下文无关文法。 [分析] 本题难度不大,主要是考上下文无关文法的基本概念。上下文无关文法的基本定义是:A->β,A∈Vn,β∈(Vn∪Vt)*,注意关键问题是保证a n b n的成立,即“a与b的个数要相等”,为此,可以用一条形如A->aAb|ab的产生式即可解决。 [答案] 构造上下文无关文法如下: S->AB|A A->aAb|ab B->Bc|c [扩展]

编译原理第三版课后答案

编译原理课后题答案 第二章 P36-6 (1) L G () 1是0~9组成的数字串 (2) 最左推导: 最右推导: P36-7 G(S) P36-8 文法: 最左推导: 最右推导: 语法树:/******************************** *****************/ P36-9 句子iiiei有两个语法树: P36-10 /************** ***************/ P36-11 /*************** L1: L2: L3: L4: ***************/ 第三章习题参考答案P64–7 (1)

最小化: P64–8 (1) (2) (3) P64–12 (a) a a,b a 0

给状态编号: a a a b b b 最小化: a a b b a b (b) 已经确定化了, 进行最小化 最小化: P64 –14 (1) 0 1 0 (2): (|)*010 1 εε 0 0 0 Y Y

最小化: 0 1 1 1 0 0 第四章 P81–1 (1) 按照T,S 的顺序消除左递归 递归子程序: procedure S; begin if sym='a' or sym='^' then abvance else if sym='(' then begin advance;T; if sym=')' then advance; else error; end else error end; procedure T; begin S; T end;

procedure 'T; begin if sym=',' then begin advance; S;'T end end; 其中: sym:是输入串指针IP所指的符号advance:是把IP调至下一个输入符号error:是出错诊察程序 (2) FIRST(S)={a,^,(} FIRST(T)={a,^,(} FIRST('T)={,,ε} FOLLOW(S)={),,,#} FOLLOW(T)={)} FOLLOW('T)={)} 预测分析表 是LL(1)文法 P81–2 文法: (1) FIRST(E)={(,a,b,^} FIRST(E')={+,ε} FIRST(T)={(,a,b,^} FIRST(T')={(,a,b,^,ε} FIRST(F)={(,a,b,^} FIRST(F')={*,ε} FIRST(P)={(,a,b,^} FOLLOW(E)={#,)} FOLLOW(E')={#,)} FOLLOW(T)={+,),#} FOLLOW(T')={+,),#} FOLLOW(F)={(,a,b,^,+,),#} FOLLOW(F')={(,a,b,^,+,),#} FOLLOW(P)={*,(,a,b,^,+,),#} (2)

各章练习题(编译原理)

第三章复习重点:1.文法与语言的对应关系 思路要点:注意结构拆分 技巧:如何将表示语言的通用字符串形式作适当的“切割”? 例:已知语言:L1 = {a x b2x c y | x, y >= 0},给出此语言的文法,并证明此语言是上下文无关语言。 提示:该题实际上要求为相应语言设计上下文无关文法。 一个文法设计好后,严格来说应当证明此文法是否对应于该语言。 解:G[S]:S →AB A →ε | aAbb B →ε | cB 推导过程: S ? AB +? a x Ab2x B /*使用A →aAbb x次*/ ? a x b2x B /*使用A →ε一次*/ ? a x b2x c x B /*使用B →cB x次*/ ? a x b2x c x/*使用B →ε一次*/ 举一反三:已知语言L2 = {a x b2y c y | x, y >= 0},给出此语言的文法,并证明此语言是上下文无关语言。 解:G[S]:S →AB A →ε | aA B →ε | bBcc 练习:14:写出下列语言对应的文法 (1).{a n b n a m b m|n,m≥0}

2. {1n 0m 0m 0n |n,m ≥0} 3. {1n 0m 0m 0n |n ≥0,m>0} 4. { a n b m c k |n,m,k ≥0} G1: S —>AA G2: S —>AB A —>aAb|ε A —>aAb|ε B —>aBb|ε G: S —>1S0 S —>A A —>0A1 A —>ε G: S →1S0|A S →1S0|0A1 A →0A1|01 A →0A1|ε 2. 给出文法,证明文法符号串是否为文法的句型,若是句型,找出这个句型的所有短语、直接短语、句柄。 1. 令文法G [E ]为: Z →bMb M →a|(L L →Ma ) ① 符号串b(Ma)b 是否为该文法的一个句型,并证明。 ② 若此符号串是句型,指出这个句型的所有短语、直接短语、句柄。 1)(5分)证明:S=> bMb=>b(Lb=>b(Ma)b 所以,符号串b(Ma)b 是该文法的一个句型。 (2)(5分)短语: Ma), (Ma), b(Ma)b 直接短语: Ma) 句柄: Ma) 练习: (10分)已知文法G[T]: T →T*F | F ;F →F ↑P | P ; P →(T) | i (1)用最右推导法证明β:T*P ↑(T*F) 是G[T]的一个句型; (2)画出β的语法树; (3)写出β的全部短语、直接短语和句柄。 (1) T=>T*F=>T*F ↑P=>T*F ↑(T)=> T*F ↑(T*F) =>T*P ↑(T*F) 证毕。 (2) 如图 T T * F F ↑ P P T * T F ( ) 第3题 语法树 (3)短语:T*P ↑(T*F) ;P ↑(T*F) ;(T*F) ;T*F ;P 直接短语:T*F ;P

编译原理习题集

第二章 2.构造产生下列语言的文法 (2){a n b m c p|n,m,p≥0} 解: G(S) :S→aS|X,X→bX|Y,Y→cY|ε (3){a n # b n|n≥0}∪{cn # dn|n≥0} 解: G(S):S→X,S→Y,X→aXb|#, Y→cYd|# } (5)任何不是以0 打头的所有奇整数所组成的集合 解:G(S):S→J|IBJ,B→0B|IB|ε,I→J|2|4|6|8, J→1|3|5|7|9} (6)(思考题)所有偶数个0 和偶数个1 所组成的符号串集合 解:对应文法为 S→0A|1B|ε,A→0S|1C B→0C|1S C→1A|0B 3.描述语言特点 (2)S→SS S→1A0 A→1A0 A→ε 解:L(G)={1n10n11n20n2… 1nm0nm |n1,n2,…,nm≥0;且n1,n2,…nm 不全 为零}该语言特点是:产生的句子中,0、1 个数相同,并且若干相接的1 后必然紧接数量相同连续的0。 (5)S→aSS S→a 解:L(G)={a(2n-1)|n≥1}可知:奇数个a 5. (1) 解:由于此文法包含以下规则:AA→ε,所以此文法是0 型文法。 7.解: (1)aacb 是文法G[S]中的句子,相应语法树是: 最右推导:S=>aAcB=>aAcb=>aacb 最左推导:S=>aAcB=>aacB=>aacb (3)aacbccb 不是文法G[S]中的句子

aacbccb 不能从S推导得到时,它仅是文法G[S]的一个句型的一部分,而不是一个句子。 11.解:最右推导: (1) S=>AB=>AaSb=>Aacb=>bAacb=>bbAacb=>bbaacb 上面推导中,下划线部分为当前句型的句柄。对应的语法树为: 第三章 3 假设M:人 W:载狐狸过河,G:载山羊过河,C:载白菜过河

编译原理第二版课后习问题详解

《编译原理》课后习题答案第一章 第 1 章引论 第 1 题 解释下列术语: (1)编译程序 (2)源程序 (3)目标程序 (4)编译程序的前端 (5)后端 (6)遍 答案: (1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。 (2)源程序:源语言编写的程序称为源程序。 (3)目标程序:目标语言书写的程序称为目标程序。 (4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶 段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符 号表管理等工作。 (5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。 (6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。

第 2 题 一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程 序的总体结构图。 答案: 一个典型的编译程序通常包含 8 个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。其各部分的主要功能简述如下。 词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机表达形式。 语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。 语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。 中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式 的中间语言代码,如三元式或四元式。 中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。 目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。 表格管理程序:负责建立、填写和查找等一系列表格工作。表格的作用是记录源程序的 各类信息和编译各阶段的进展情况,编译的每个阶段所需信息多数都从表格中读取,产生的中间结果都记录在相应的表格中。可以说整个编译过程就是造表、查表的工作过程。需要指出的是,这里的“表格管理程序”并不意味着它就是一个独立的表格管理模块,而是指编译程序具有的表格管理功能。 错误处理程序:处理和校正源程序中存在的词法、语法和语义错误。当编译程序发现源 程序中的错误时,错误处理程序负责报告出错的位置和错误性质等信息,同时对发现的错误

编译原理第七章练习题

第7节习题 一、单项选择题 1、中间代码生成所依据的是。 a.语法规则 b.词法规则 c.语义规则 d.等价变换规则 2、四元式之间的联系是通过实现的。 a.指示器 b.临时变量 c.符号表 d.程序变量 3、后缀式ab+cd+/可用表达式来表示。 a.a+b/c+d b.(a+b)/(c+d) c.a+b/(c+d) d.a+b+c/d 4、表达式(┓A∨B)∧(C∨D)的逆波兰表示为。 a. ┓AB∨∧CD∨ b. A┓B∨CD∨∧ c. AB∨┓CD∨∧ d. A┓B∨∧CD∨ 5 所对应的表达式为。 a.A+B+C+D b.A+(B+C)+D c.(A+B)+C+D d.(A+B)+(C+D) 6、四元式表示法的优点为。 a.不便于优化处理,但便于表的更动 b.不便于优化处理,但节省存储空间 c.便于优化处理,也便于表的更动 d.便于表的更动,也节省存储空间 7、终结符具有属性。 a.传递 b.继承 c.抽象 d.综合 解答 1、选c。 2、四元式之间的联系是通过临时变量实现的,故选b。 3、选b。 4、选b。 5、选d。 6、四元式表示法的优点与间接三元式相同,故选c。 7、选d。 二、多顶选择题 1、中间代码主要有。 a.四元式b.二元式c.三元式d.后缀式e.间接

三元式 2、下面中间代码形式中,能正确表示算术表达式a+b+c 的有 。 a .ab+c+ b .abc++ e .a+b+c 3、在下面的 语法制导翻译中,采用拉链-回填技术。 a .赋值语句 b .goto 语句 c .条件语句 d .循环语句 4、下列 中间代码形式有益于优化处理。 a .三元式 b .四元式 c .间接三元式 d .逆波兰表示法 e .树形表示 法 5、在编译程序中安排中间代码生成的目的是 。 a .便于进行存储空间的组织 b .利于目标代码的优化 c .利于编译程序的移植 d .利于目标代码的移植 e .利于提高目标代码的质量 6、下面的中间代码形式中, 能正确表示算术表达式 a .ab+c* b .abc*+ c .a+b*c 7、三地址代码语句具体实现通常有 表示方法。 a .逆波兰表示 b .三元式 c .间接三元式 d .树形表示 e .四元式 解答 1、选a 、c 、d 、e 。 2、b 、d 的中间代码不能正确表示a+b+c ,而e 不是中间代码:故选a 、c 。 3、凡涉及到跳转的语句都需要采用拉链——回填技术,故选 b 、c 、d 。 4、选b 、c 。 5、选b 、d 。 6、选b 、e 。 7、选b 、c 、e 。

编译原理教程课后习题答案——第二章

第二章 词法分析 2.1 完成下列选择题: (1) 词法分析器的输出结果是 。 a. 单词的种别编码 b. 单词在符号表中的位置 c. 单词的种别编码和自身值 d. 单词自身值 (2) 正规式M1和M2等价是指 。 a. M1和M2的状态数相等 b. M1和M2的有向边条数相等 c. M1和M2所识别的语言集相等 d. M1和M2状态数和有向边条数相等 (3) DFA M(见图2-1)接受的字集为 。 a. 以0开头的二进制数组成的集合 b. 以0结尾的二进制数组成的集合 c. 含奇数个0的二进制数组成的集合 d. 含偶数个0的二进制数组成的集合 【解答】 (1) c (2) c (3) d 图2-1 习题2.1的DFA M 2.2 什么是扫描器?扫描器的功能是什么? 【解答】 扫描器就是词法分析器,它接受输入的源程序,对源程序进行词法分析并识别出一个个单词符号,其输出结果是单词符号,供语法分析器使用。通常是把词法分析器作为一个子程序,每当词法分析器需要一个单词符号时就调用这个子程序。每次调用时,词法分析器就从输入串中识别出一个单词符号交给语法分析器。 2.3 设M=({x,y}, {a,b}, f, x, {y})为一非确定的有限自动机,其中f 定义如下: f(x,a)={x,y} f {x,b}={y} f(y,a)=Φ f{y,b}={x,y} 试构造相应的确定有限自动机M ′。 【解答】 对照自动机的定义M=(S,Σ,f,So,Z),由f 的定义可知f(x,a)、f(y,b)均为多值函数,因此M 是一非确定有限自动机。 先画出NFA M 相应的状态图,如图2-2所示。 图2-2 习题2.3的NFA M 用子集法构造状态转换矩阵,如表 表2-1 状态转换矩阵 1b a

编译原理第一章练习和答案

例1设有文法G[S]: S →a|(T )| T →T,S|S (1) 试给出句子(a,a,a)的最左推导。 (2) 试给出句子(a,a,a)的分析树 (3) 试给出句子(a,a,a)的最右推导和最右推导的逆过程(即最左规约)的每一步的句柄。 【解】(1) (a,a,a)的最左推导 S=>(T) =>(T,S) =>( T,S,S) =>( S,S,S) =>(a,S,S) =>(a,a,S) =>(a,a,a) (2)(a,a,a)的分析树 S ( T ) T , S S T , S a a (3) (a,a,a)最右推导 最左规约每一步的句柄 S=>(T) 句柄为:(T) =>(T,S) 句柄为:T,S =>(T,a) 句柄为:a =>(T,S,a) 句柄为:T,S =>(T,a,a) 句柄为:第一个a =>(S,a,a) 句柄为:S =>(a,a,a) 句柄为:第一个a 例2已知文法G[Z]: Z →0U|1V U →1Z|1 V →0Z|0 (1) 请写出此文法描述的只含有4个符号的全部句子。 (2) G [Z]产生的语言是什么? (3) 该文法在Chomsky 文法分类中属于几型文法? 【解】(1)0101,0110,1010, 1001 (2)分析G[Z]所推导出的句子的特点:由Z 开始的推导不外乎图1所示的四种情形。 图 1文法G[Z]可能的几种推导 Z 1 U Z U Z 1 Z 1 Z 1 V 由Z 推导出10或01后就终止或进入递归,而Z 的每次递归将推导出相同的符号串:10或

01。所以G[Z]产生的语言L(G[Z])={x|x∈(10|01)+ } (3)该文法属于3型文法。 例3 已知文法G=({A,B,C},{a,b,c},P,A), P由以下产生式组成: A→abc A→aBbc Bb→bB Bc→Cbcc bC→Cb aC→aaB aC→aa 此文法所表示的语言是什么? 【解】 分析文法的规则: 每使用一次Bc→Cbcc,b、c的个数各增加一个; 每使用一次aC→aaB或aC→aa, a的个数就增加一个; 产生式Bb→bB、 bC→Cb起连接转换作用。 由于A是开始符号,由产生式A→abc推导得到终结符号串abc;由产生式A→aBbc推导得到B后,每当使用产生式Bb→bB、Bc→Cbcc、bC→Cb、aC→aaB就会递归调用B一次,所产生的a、b、c的个数分别增加一个,因此推导所得的终结符号串为abc、aabbcc、aaabbbccc、…所以文法描述的语言为{ a n b n c n|n>0}. 例4 构造描述语言L(G[S])={(n)n|n≥0} 的文法。 【解】(1)找出语言的一些典型句子: n=0 ε n=1 ( ) n=2 (()) … 所以, L(G[S])={ ε、( ) (())、((()))、…} (2)分析句子的特点: 只含有(和),(和)的个数相同且对称, 句子中所含的符号数可无限, 句子的个数可无限。 (3)凑规则:由 S→ε|() 得到ε|(),由 A→ (S) 得到 (()),(()) 是在()的两边再加上一对()得到,((()))是在(())的两边再加上一对()得到,…所以将上述产生式合并为S→(S) |ε。 (4)得到文法 G[S]: S→(S) |ε (5)检验:语言所有的句子均可由文法G[S]推导出来, 文法G[S]推导出来的所有终结符号串均为语言的句子. 例5 构造描述语言L(G[S])={a m b n |n>m>0} 的文法。 【解】找出语言的一些典型句子:abb、abbb、…、aabbb、aabbbb、…,语言的句子的特点是仅含有a、b, a在b的左边,b的个数大于a的个数,a的个数至少是1。 单独生成c k, k>1 可用产生式 C→c |Cc 句子中要求b的个数大于a的个数,所以得到文法:

编译原理第二版作业答案_第2章

第二章 文法和语言 p48 4、6(6)、11、 12(2)(6)、18(2) 4 证明文法G=({E,O},{(,),+,*,v ,d},P ,E )是二义的,其中P 为 E → EOE | (E) | v | d O → + | * 证明: 因为E=〉 EOE =〉EOEOE =〉EOEOv =〉EOE+v =〉EOv+v =〉E*v+v =〉v*v+v , 句子v*v+v 有两棵不同的语法树 所以文法G 是二义的。 问题:1)只有文字说明,比如v*v+v 有两棵语法树,但没有画出语法树或者最左(最右)推导过程 2)给出的是不同句子(v*v+d v+v*d )的语法树 6、已知文法G : E E E E O O v * v + v E E E E O O v + v * v

〈表达式〉∷=〈项〉|〈表达式〉+〈项〉 〈项〉∷=〈因子〉|〈项〉*〈因子〉 〈因子〉∷=(〈表达式〉)| i 试给出下述表达式的推导及语法树 (6)i+i*i 推导过程: 〈表达式〉=〉〈表达式〉+〈项〉E=〉E+T =〉〈表达式〉+〈项〉*〈因子〉=〉E+ T*F =〉〈表达式〉+〈项〉* i =〉E+ T*i =〉〈表达式〉+ 〈因子〉* i =〉E+F*i =〉〈表达式〉+ i* i =〉E+i*i =〉〈项〉+ i* i =〉T +i*i =〉〈因子〉+ i* i =〉F +i*i =〉i +i*i =〉i +i*i 共8步推导 语法树: 〈表达式〉 + 〈因子〉〈项〉 i 〈因子〉 i 〈项〉 〈项〉 〈因子〉 i *

11、一个上下文无关文法生成句子abbaa的推导树如下: (1)给出该句子相应的最左推导和最右推导 (2)该文法的产生式集合P可能有哪些元素? (3)找出该句子的所有短语、简单短语、句柄。 (1)最左推导: S=〉ABS=〉aBS=〉aSBBS=〉aBBS =〉abBS=〉abbS =〉abbAa=〉abbaa 最右推导: S =〉ABS=〉ABAa=〉ABaa=〉ASBBaa =〉ASBbaa=〉ASbbaa=〉Abbaa=〉abbaa (2)该文法的产生式集合P可能有下列元素: S→ABS | Aa|εA→a B→SBB|b

编译原理第1阶段练习题

考试科目:《编译原理》第1章至第4章(总分100分)时间:90分钟 一、选择与填充(30) 1. 文法G[A]:A→ε A→aB B→Ab B→a是( ) A. 0型文法 B. 1型文法 C. 2型文法 D. 3型文法 2. 微小语言Micro的单词有下面的几种:标识符、_____________、实常数、保留字、___________、换行符。 3.编译程序的功能可以分解为词法分析、语法分析、___________________、中间代码生成、中间代码优化、目标代码生成。 4. 词法分析器的输入是( )。 A. 单词符号串 B. 源程序 C. 语法单位 D. 目标程序 5. 一个上下文无关文法 G 包括四个组成部分,它们是:一组非终结符号,一组终结符号,一个开始符号,以及一组( )。 A.句子 B.句型 C.单词 D.产生式 6. 若一个文法是递归的,则它所产生的语言的句子是( )。 A.无穷多个 B.有穷多个 C.可枚举的 D.个数是常量 二、给出与正规式R=1(0|1)*101等价的NFA。(14) 三、写出下面程序经词法分析后的TOKEN表示。(16) begin var X:real; var J:integer; read(J); J:=J+(J*20); X:=J-1; Write(2*J+X) End 四、已知文法 G[E] 为:(20) E→T|E+T|E-T T→F|T*F|T/F F→(E)|i ①该文法的开始符号(识别符号)是什么? ②请给出该文法的终结符号集合 Vt 和非终结符号集合 Vn 。 ③找出句型 T+T*F+i 的所有短语、简单短语和句柄。

编译原理习题

第三章词法分析练习 3.1给出一个正则表达式和自动机,使之表示满足下面条件的0、1序列: 1)只包含两个1。 2)不包含连续的1。 3)包含偶数个1。 3.2写出下面符号串集的正则表达式: 1){a,b,c}a偶数出现 2){a,b,c}不包含子串baa 3)二进制数,大于101001 4)二进制数,4的倍数 5)偶数个0奇数个1的0/1串 3.3构造识别下列正则表达式定义的NFA: 1)(a|(b)+ 2)(a*|(b*)* 3)(a|(bc)*d* 4)((0|1)*(2|3)*)|0011 5)(a|b)*abb(a|b)* 3.4为下列正则表达式构造极化的DFA: 1)(a|b)*a(a|b) 2)(a|b)*a(a|b)(a|b) 3.5利用自动机原理构造模式匹配程序,即构造一个程序,使它能识别给定a/b串是不 是a i b j a k b m类串:,其中i和j是大于等于0的整数,而k和m是大于0的整数。 3.5将下面不确定自动机NFA转换为确定自动机DFA: 3.6将下面不确定自动机NFA转换为确定自动机DFA: 3.7试将下面不确定自动机NFA转换为确定自动机DFA:

3.8试写出下面确定自动机DFA的正则表达式: 3.9设置一个名字表NameL和整数表ConstL,当遇到标识符时,将其字符串送入名字 表NameL,并把其名字表地址作为标识符的Value值。整常数情形也一样,不要求翻译成二进制数。要求在NameL表和ConstL表中没有相同元素。试用C语言写一个针对上述单词集的词法分析器。 单词class value begin BeginSymb end EndSymb var VarSymb integer IntSymb if IfSymb then ThenSymb else ElseSymb ;SemiSymb :ColonSymb :=AssigSymb ::=<整数部分><小数部分><指数部分> <整数部分>::=<数字>|<整数部分><数字> <小数部分>::=ε|.<整数部分> <指数部分>::=ε|e<指数符号><整数部分>

编译原理复习题目集答案

第4章词法分析 重点内容:正规式转化为DFA a、正规式->NFA b、NFA -> DFA(子集法) c、DFA化简(分割法) 题目1:课件例题: a、为R=(a|b)*(aa|bb)(a|b)*构造NFA b、从NFA构造DFA的算法 c、化简

题目2: 4.7 例1:构造正规式相应的DFA:1(0|1)*101 按照以下三步: (1)由正规表达式构造转换系统(NFA) (2)由转换系统(NFA)构造确定的有穷自动机DFA (3)DFA的最小化 答:(1)构造与1(0|1)*101等价的NFA (2)将NFA转换成DFA:采用子集法,即DFA的每个状态对应NFA的一个状态集合: 除X,A外,重新命名其他状态:

1、将M 的状态分成非终态和终态集{X,A,B,C}和{D}。 2、寻找子集中不等价状态{X,A,B,C}=>{X},{A,B}{C}=>{X}{A}{B}{C},无需合并。 最后生成 DFA : 题目3:自习、书本练习4.7,参考答案见《z4 书本练习4.7.doc 》 已知文法G[S]: S →aA|bQ A →aA|bB|b B →bD|aQ Q →aQ|bD|b E →aB|bF F →bD|aE|b 1、 构由于不可到达,去除E 、F 相关的多余产生式 2、 由新的G[S]构造NFA 如下

5、使用分割法化简以上DFA G: 5.1 令G={(0,1,3,4,6),(2,5)}// 分别为非终态和终态集 5.2 由{0,1,3,4,6}a={1,3},{0,1,3,4,6}b={3,2,5,6,4} 将{0,1,3,4,6}划分为 {0,4,6}{1,3},得G={(0,4,6),(1,3),(2,5)} 5.3 由{0,4,6}b={3,6,4},将之划分为{0},{4,6},得G={(0),(4,6),(1,3),(2,5)} 5.4 观察后,G中状态不可再分,为最小化DFA。 6、分别用 0,4,1,2代表各状态,DFA状态转换图如下: 造相应的最小的DFA 第5章自顶向下的语法分析 重点内容:LL(1)文法 a、去除左递归 b、LL(1)文法的判定(first、follow、select集) c、预测分析表 d、使用栈和预测分析表对输入串的分析 题目1:课件例题:消除左递归+判定+分析 算术表达式文法G E→E+T│T T→T*F│F F→(E)│I d、分析输入串i+i*i#

(完整版)哈工大编译原理习题及答案

何谓源程序、目标程序、翻译程序、编译程序和解释程序它们之间可能有何种关系 一个典型的编译系统通常由哪些部分组成各部分的主要功能是什么 选择一种你所熟悉的程序设计语言,试列出此语言中的全部关键字,并通过上机使用该语言以判明这些关键字是否为保留字。 选取一种你所熟悉的语言,试对它进行分析,以找出此语言中的括号、关键字END以及逗号有多少种不同的用途。 试用你常用的一种高级语言编写一短小的程序,上机进行编译和运行,记录下操作步骤和输出信息,如果可能,请卸出中间代码和目标代码。 第一章习题解答 1.解:源程序是指以某种程序设计语言所编写的程序。目标程序是指编译程序(或解释程序)将 源程序处理加工而得的另一种语言(目标语言)的程序。翻译程序是将某种语言翻译成另一种语言的程序的统称。编译程序与解释程序均为翻译程序,但二者工作方法不同。解释程序的特点是并不先将高级语言程序全部翻译成机器代码,而是每读入一条高级语言程序语句,就用解释程序将其翻译成一段机器指令并执行之,然后再读入下一条语句继续进行解释、执行,如此反复。即边解释边执行,翻译所得的指令序列并不保存。编译程序的特点是先将高级语言程序翻译成机器语言程序,将其保存到指定的空间中,在用户需要时再执行之。即先翻译、后执行。

2.解:一般说来,编译程序主要由词法分析程序、语法分析程序、语义分析程序、中间代码生成 程序、代码优化程序、目标代码生成程序、信息表管理程序、错误检查处理程序组成。 3.解:C语言的关键字有:auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while。上述关键字在C语言中均为保留字。 4.解:C语言中括号有三种:{},[],()。其中,{}用于语句括号;[]用于数组;()用于函数(定 义与调用)及表达式运算(改变运算顺序)。C语言中无END关键字。逗号在C语言中被视为分隔符和运算符,作为优先级最低的运算符,运算结果为逗号表达式最右侧子表达式的值(如:(a,b,c,d)的值为d)。 5.略 第二章前后文无关文法和语言 21设有字母表A1={a,b,…,z},A2={0,1,…,9},试回答下列问题: (1) 字母表A1上长度为2的符号串有多少个 (2) 集合A1A2含有多少个元素 (3) 列出集合A1 (A1∪A2)*中的全部长度不大于3的符号串。 22试分别构造产生下列语言的文法。 (1) {anbn|n≥0}; (2) {anbmcp|n,m,p≥0}; (3) {an#bn|n≥0}∪{cn#dn|n≥0};

编译原理练习题及答案

第一章练习题(绪论) 一、选择题 1.编译程序是一种常用的软件。 A) 应用B) 系统C) 实时系统D) 分布式系统 2.编译程序生成的目标代码程序是可执行程序。 A) 一定B) 不一定 3.编译程序的大多数时间是花在上。 A) 词法分析B) 语法分析C) 出错处理D) 表格管理4.将编译程序分成若干“遍”将。 A)提高编译程序的执行效率; B)使编译程序的结构更加清晰,提高目标程序质量; C)充分利用内存空间,提高机器的执行效率。 5.编译程序各个阶段都涉及到的工作有。 A) 词法分析B) 语法分析C) 语义分析D) 表格管理6.词法分析的主要功能是。 A) 识别字符串B) 识别语句C) 识别单词D) 识别标识符7.若某程序设计语言允许标识符先使用后说明,则其编译程序就必须。 A) 多遍扫描B) 一遍扫描 8.编译方式与解释方式的根本区别在于。 A) 执行速度的快慢B) 是否生成目标代码 C) 是否语义分析

9.多遍编译与一遍编译的主要区别在于。 A)多遍编译是编译的五大部分重复多遍执行,而一遍编译是五大部 分只执行一遍; B)一遍编译是对源程序分析一遍就立即执行,而多遍编译是对源程 序重复多遍分析再执行; C)多遍编译要生成目标代码才执行,而一遍编译不生成目标代码直 接分析执行; D)多遍编译是五大部分依次独立完成,一遍编译是五大部分交叉调 用执行完成。 10.编译程序分成“前端”和“后端”的好处是 A)便于移植 B)便于功能的扩充 C)便于减少工作量 D)以上均正确

第二章练习题(文法与语言) 一、选择题 1.文法 G 产生的 (1) 的全体是该文法描述的语言。 A.句型 B. 终结符集 C. 非终结符集 D. 句子 2.若文法 G 定义的语言是无限集,则文法必然是 (2) A递归的 B 上下文无关的 C 二义性的 D 无二义性的 3. Chomsky 定义的四种形式语言文法中, 0 型文法又称为(A)文法; 1 型文法又称为(C)文法; 2 型语言可由(G) 识别。 A 短语结构文法 B 上下文无关文法 C 上下文有关文法 D 正规文法 E 图灵机 F 有限自动机 G 下推自动机 4.一个文法所描述的语言是(A);描述一个语言的文法是(B)。 A 唯一的 B 不唯一的 C 可能唯一,也可能不唯一 二、构造文法以生成下列语言: 1.{a n b n︱n≥0} G=({S},{a,b},S,P),其中P = { S→ | aSb } 2.{a n b m︱n,m≥1} G=({S,A,B},{a,b},S,P), 其中P = { S→ AB,A→a︱aA,B→b︱bB} 3.{a n , b m︱n,m≥1} G=({S,A,B},{a,b},S,P), 其中P = { S→ A | B,A→a︱aA,B→b︱bB}

相关主题
文本预览
相关文档 最新文档