


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、东北农业大学网络教育学院编译原理作业题参考答案第一章编译概述多项选择题:1. 编译程序各阶段的工作都涉及到(bc)。()a.语法分析 b.表格管理 c.出错处理d.语义分析 e.词法分析2.编译程序工作时,通常有(abce)阶段。 ()a.词法分析 b.语法分析 c.中间代码生成 d.语义检查 e.目标代码生成填空题:1. 解释程序和编译程序的区别在于(是否生成目标程序)。()2. 编译过程通常可分为 5 个阶段,分别是(词法分析)、(语法分析)、(中间代码生成)、(代码优化)和(目标代码)生成。() 3编译程序工作过程中,第一段输入是(源程序),最后阶段的输出为(目标代码生成)程序。()4编
2、译程序是指将(高级语言编写的)程序翻译成(目标语言)程序的程序。()综合题:1.画出编译程序的总体结构图,简述各部分的主要功能。() 解答:编译程序的总体结构如下图所示:词法分析程序:输入源程序,进行词法分析,输出单词符号。语法分析程序:在词法分析的基础上,根据语言的语法规则(方法规则)把单词符号串分解成各类语法单位,并判断输入串是否构成语法上正确的“程序”。中间代码生成程序:按照语义规则把语法分析程序归约(或推导)出的语法单位翻译成一定形式的中间代码,比如说四元式。优化程序:对中间代码进行优化处理。目标代码生成程序:把中间代码翻译成目标语言程序。表格管理模块保存一系列的表格,登记源程序的各类
3、信息和编译各阶段的进展情况。编译程序各阶段所产生的中间结果都记录在表格中,所需信息多数都需从表格中获取,整个编译过程中都在不断地和表格打交道。出错处理程序对出现在源程序中的错误进行处理。此外,编译的各个阶段都可能出现错误。出错处理程序对发现的错误都及时进行处理。第二章文法和语言的基本知识多项选择题:1. abc2. ace3. bcd4. ac5. bc填空题:1文法中的终结符和非终结符的交集是(空集)。词法分析器交给语法分析器的文法符号一定是(终结符),它一定只出现在产生式的(右)部。() 2最左推导是指每次都对句型中的(最左)非终结符进行扩展。()3. 在语法分析中,最常见的两种方法一定是
4、(自上而上)分析法,另一是(自下而上)分析法。()4. 采用(自上而下)语法分析时,必须消除文法的左递归。()5(语法)树代表推导过程,(分析)树代表归约过程。()6. 自下而上分析法采用(移进)、归约、错误处理、(接受)等四种操作。()7. chomsky 把文法分为(4)种类型,编译器构造中采用 (2 型) 和(3 型)文法,它们分别产生(上下文无关语言)和(正规语言)语言,并分别用(下推自动机)和(有限)自动机识别所产生的语言。()判断题:1正确2错误3错误4错误5错误6 错误7正确8正确9错误简答题1 句柄:()解答:一个句型的最左直接短语称为该句型的句柄。2素短语:()解答:至少含有
5、一个终结符的素短语, 并且除它自身之外不再含任何更小的素短语。3语法树:()解答:满足下面 4 个条件的树称之为文法 gs的一棵语法树。每一终结均有一标记,此标记为 vnvt 中的一个符号;树的根结点以文法 gs的开始符 s 标记;若一结点至少有一个直接后继,则此结点上的标记为 vn 中的一个符号;若一个以 a 为标记的结点有 k 个直接后继,且按从左至右的顺序,这些结点的标记分别为x1,x2,xk,则 ax1,x2,xk, 必然是 g 的一个产生式。4归约:()解答:我们称 直接归约出 a,仅当 a 是一个产生式, 且 、(vnvt)*。归约过程就是从输入串开始,反复用产生式右部的符号替换成
6、产生式左部符号,直至文法开始符。5推导:()解答:我们称 a 直接推出 ,即 at,仅当 a 是一个产生式,且 、(vnvt)*。如果 12n,则我们称这个序列是从 1 至 2 的一个推导。若存在一个从 1n 的推导,则称 1 可推导出 n。推导是归约的逆过程。问答题1. 给出上下文无关文法的定义。() 解答:一个上下文无关文法 g 是一个四元式(vt,vn,s, p),其中:vt 是一个非空有限集,它的每个元素称为终结符号;vn 是一个非空有限集,它的每个元素称为非终结符号,vtvn=;s 是一个非终结符号,称为开始符号;p 是一个产生式集合(有限),每个产生式的形式是 p,其中,pvn,(
7、vtvn)*。开始符号 s 至少必须在某个产生式的左部出现一次。2. 文法 gs:saspq|abq qppqbpbb bqbc cqcc(1) 它是 chomsky 哪一型文法?(2) 它生成的语言是什么?()解答:(1)由于产生式左部存在终结符号,且所有产生式左部符号的长度均小于等于产生式右部的符号长度,所以文法 gs是 chomsky1 型文法,即上下文有关文法。(2)按产生式出现的顺序规定优先级由高到低(否则无法推出句子),我们可以得到:sabqabc saspqaabqpqaabpqqaabbqqaabbcq aabbccsaspqaaspqpqaaabqpqpqaaabpqqpqa
8、aabpqpqqaaappqqqaaabbpqqq aaabbqqqaaabbbcqqaaabbbccqaaabbbccc于是得到文法 gs生成的语言 l=anbncn|n13. 按 指 定 类 型 , 给 出 语 言 的 文 法 。 l=aibj|ji1的上下文无关文法。()解答:由 l=aibj|ji1知,所求该语言对应的上下文无关文法首先应有 sasb 型产生式,以保证 b 的个数不少于 a 的个数;其次,还需有 ssb 或 sbs 型的产生式,用以保证 b 的个数多于 a 的个数;也即所求上下文无关文法 gs为:gs:sasb|sb|b4. 有文法 g:saacb|bdaaab|c b
9、bsca|b(1) 试求句型 aaabcbbdcc 和 aacbbdcc 的句柄;(2) 写出句子 acabcbbdcc 的最左推导过程。()解答:(1) 分别画出对应两句型的语法树,如下图所示句柄:aabbd图 语法树(2) 句 子 acabcbbdcc 的 最 左 推 导 如 下 : staacbaaabcbacabcbacabcbacabcbscaacabcbbdcaacabcbbdcaacabcbbdcc5. 对于文法 gs:s(l)|as|a ll, s|s(1) 画出句型(s,(a)的语法树。(2) 写出上述句型的所有短语、直接短语、句柄和素短语。()解答:(1) 句型(s,(a)
10、的语法树如下图所示。图 句型(s,(a)的语法树(2) 由上图可知:短语:s、a、(a)、s,(a)、(s,(a);直接短语:a、s;句柄:s;素短语:素短语可由图 2-8-3 中相邻终结符之间的优先关系求得,即;因此素短语为 a。6. 考虑文法 gs,其产生式如下:s(l)|a ll,s|s(a)试指出此文法的终结符号、非终结符号。(b)给出句子(a,(a,a)的分析树。(c)构造句子(a,(a,a)的一个最左推导。(d)构造句子(a,(a,a)的一个最右推导。(e)这个文法生成的语言是什么?() 解答:(a) 终结符号为:(,),a,非终结符号为:s,l 开始符号为:s(b)分析树(c)s
11、 (l) (l,s) (s,s) (a,s) (a,(l) (a,(l,s)(a,(s,s) (a,(a,s) (a,(a,a)(d) s (l) (l,s) (l,(l) (l,(l,s) (l,(l,a)(l,(s,a) (l,(a,a) (s,(a,a) (a,(a,a) (e) l(gs) = (1,2,.,n)或 a其中 i(1in)是 l(gs)。即 l(gs)产生一个以 a 为原子的纯表,但不包括空表。7考虑文法 gt:tt*f|f ffp|p p(t)|i证明 t*p(t*f)是该文法的一个句型,并指出直接短语和句柄。()解答:首先构造 t*p(t*f)的语法树如下图所示。图
12、句型 t*p(t*f)的语法树由上图可知,t*p(t*f)是文法 gt的一个句型。直接短语有两个,即 p 和 t*f;句柄为 p。8. 试描述下列文法产生的语言 l(gs)()s10s0|aa aba|a解答:l(g)=(10)iabna0in0 i09. 已知语言 l(g)=abnc|n1 试对该语言构造相应文法。() 解答:gz:zabcbbb|b10. 证明下列文法的二义性()1gz2gszazbz|az|asab abb|bc|ba bsb|ba|a cbb|b解答:(1)对于句子 aaaba,画出二棵不同的语法树,因而是二义的。(2)gs对于句子 baba,画出二棵不同的语法树,因而
13、是二义的。11. 有文法 gs:sises|is|i该文法是否是二义的。试证明之。() 解答:对于句子 iiiei,有两棵不同的语法树,故文法是二义的。12. 文法 gt:tar,rtb|d 生成的语言是什么?gt是否为 3 型文法?() 解答:不是 3 型文法。13. 试写出能够描述下列电话号码格式的文法。()67391742010-67391742(010)67391742解答: 文法产生式规则如下: - ()digdigdigdigdigdigdigdigdigdigdigdigdig14. 试构造生成语言的上下文无关文法。()(1) anbnci | n1,i0 (2) w | wa,
14、b+,且 w 中 a 的个数恰好比 b 多 1 解答:(1)把 anbnci 分成 anbn 和 ci 两部分,分别由两个非终结符号生成,因此,生成此文法的产生式为:s aba aab|ab b cb|(2)令 s 为开始符号,产生的 w 中 a 的个数恰好比 b 多一个,令 e 为一个非终结符号,产生含相同个数的 a 和 b 的所有串,则产生式如下:s ae|ea|bss|sbs|ssb e aebe|beae|15. 下面的二义性文法描述命题演算公式,为它写一个等价的非二义性文法。gs:s - s and s |s or s | not s | p | q | (s)()解答:gs:s -
15、 s and a | a a - a or b | bb - not b |p | q | (s)16. 对于下列语言分别写出它们的正规表达式。 ()(1) 英文字母组成的所有符号串,要求符号串中顺序包含五个元音。(2) 英文字母组成的所有符号串,要求符号串中的字母依照词典顺序排列。解答:(1) 令 letter 表示除这五个元音外的其它字母。(letter)*a(letter)*e(letter)*i(letter)*o(letter)*u(letter)*(2) a*b*.z*第三章词法分析与有穷自动机多项选择题:1. ace2. abd填空题:1. 确定有限自动机 dfa 是( nfa
16、)的一个特例。()2. 若二个正规式所表示的( 正规集 )相同,则认为二者是等价的。()3. 一个字集是正规的,当且仅当它可由( dfa/nfa)所 (识别) 。()判断题:1 错误2错误3 错误4正确5正确6正确7正确8正确9错误10正确综合题:1. 设 m(x,y, a,b, f,x,y)为一非确定的有限自动机,其中 f 定义如下: f(x,a)x,yf(a,b)yf(y,a)f(y,b)x,y试构造相应的确定有限自动机 m。()解答:对照自动机的定义 m=(s,f,s0,z), 由 f 的定义可知 f(x,a)、f(y,b)均为多值函数,所以是一非确定有限自动机,先画出 nfam 相应的
17、状态图,如图下所示。图 nfam用子集法构造状态转换矩阵下表所示。将转换矩阵中的所有子集重新命名而形成下表所示的状态转换矩阵。表状态转换矩阵即得到 m(0,1,2, a,b, f,0, 1,2),其状态转换图如下图所示。将上图的 dfam 最小化。首先,将 m的状态分成终态组1,2与非终态组0;其次,考察1,2。由于1,2a=1,2b=2 1,2, 所以不再将其划分了,也即整个划分只有两组0,1,2:令状态 1 代表1,2,即把原来到达 2 的弧都导向 1,并删除状态 2。 最后,得到如下图所示化简 dfam。图 化简后的 dfam2. 对给定正规式 b*(d|ad)(b|ab)+,构造其 n
18、fam。()解答:首先用 a+=aa*改造正规式得:b*(d|ad)(b|ab)(b|ab)*; 其次,构造该正规式的 nfam,如下图所示。图 nfam3. 字母表a,b上的正规式 r=(ba|a)*,构造 r 的相应 dfa。() 解答:iiaibx1y1y21y1y221yiiaib123223324. 请写出在=(a,b)上,不是 a 开头的,但以 aa 结尾的字符串集合的正规表达式,并构造与之等价状态最少的 dfa。()解答:根据题意,不以 a 开头就意味着以 b 开头,且以 aa 结尾的正规式为:b(a|b)* aa根将图 1 所示的 nfa 确定化,如图 2 所示。nfa 将图
19、1 所示的 nfa 确定化,如图从图 2 可知已为最简状态,由于开始状态 0 只能输入字符 b 而不能与状态 1 合并,而状态 2 和状态 3 面对输入符号的下一状态相同,但两者一为非终态、一为终态,故也不有合并,故图 2 所示的状态转换矩阵已是最简的 dfa,如图 3 所示据正规式画出 nfa,如图 1 所示。图 2 状态转换矩阵图 3 最简 dfa5. 人运狼、羊、菜过河,一次运一件,不让羊吃掉菜,也不让狼吃掉羊,画出渡河的状态转换图。可否将其抽象为一个有限自动机。()解答:先写出渡河的方法,串中对象顺序为人来回渡河时所运的货物的顺序:羊空菜羊狼空羊羊空狼羊菜空羊现给出一个 nfa:m=(
20、,q,0,9,)其中=羊,空,菜,狼 q=0,1,2,3,4,5,6,7,8,9转形函数(0,羊)=1,(1,空)=2,(2,菜)=3,(2,狼)=5(3,羊)=4,(5,羊)=6,(4,狼)=7,(6,菜)=7(7,空)=8,(8,羊)=96. 对于正规表达式 (a|b)*a(a|b) 构造最小状态的 dfa。() 解答:nfa m:dfa m:化简:中的 dfa m 中没有等价状态,因此为最小化的 dfa m。第四章语法分析多项选择题:1. ad2. ce3. acde4. ce5. abce6. acde填空题:1. 对于一个文法,如果能够构造 (lr(0)文法) 。使得它的 (每个入口
21、) 均是唯一确定的,则称该文法为 lr 文法。()2. 字的前缀是指该字的 (任意首部) 。()3. 活前缀是指 (规范句型) 的一个前缀,这种前缀不含 (句柄) 之后的任何符号。()4. 在 lr 分析过程中,只要 (输入串) 的已扫描部分保持可归约成一个 (活前缀) ,则扫描过的部分正确。()5. 将识别 (活前缀) 的 nfa 确定化,使其成为以 (项目集合) 为状态的 dfa,这个 dfa 就是建立(lr分析算法) 的基础。()6. a称为 (归约) 项目;对文法开始符 s为 (接受) 项目;若 a 为终结符,则称aa 为 (移进) 项目;若 b 为非终结符,则称 aa 为 (待约)
22、项目。() 7lr(0)分析法的名字中“l”表示 (自左至右分析) ,“r”表示 (采用最右推导的逆过程即最左归约),“0”表示 (向右查看 0 个字符) 。()判断题:1正确简答题: 综合题:1. 构造下面文法的 ll(1)分析表。()dtltint | real lid r r, id r | 解答:ll(1)分析表见下表。分析虽然这个文法很简单,我们还是从求开始符号集合和后继符号集合开始。first(d)=first(t)=int, realfollow(d)=follow(l)=#first(l)=idfollow(t)=idfirst(r)=,, follow(r)=#有了上面每个非
23、终结符的 first 集合,填分析表时要计算一个产生式右部 的 first()就不是件难事了。填表时唯一要小心的时, 是产生式 r 右部的一个开始符号,而#在 follow(r)中,所以 r填在输入符号#的栏目中。表 ll(1)分析表2. 下面文法 gs是否为 ll(1)文法?说明理由。()sab|pqxaxybbc pdp|qaq|解答:该文法不是 ll(1)文法,见下面分析中的说明。分析只有三个非终结符有两个选择。(1)p 的两个右部 dp 和 的开始符号肯定不相交。(2)q 的两个右部 aq 和 的开始符号肯定不相交。(3) 对 s 来说,由于 xfirst(ab),同时也有 xfirs
24、t(pqx)(因为 p 和 q 都可能为空)。所以该文法不是 ll(1)文法。3. 设有以下文法:() gs:saabde|d absd|e bsac|cd|dse|(1) 求出该文法的每一个非终结符 u 的 follow 集。(2) 该文法是 ll(1)文法吗?(3) 构造 cs的 ll(1)分析表。解答:(1)求文法的每一个非终结符 u 的 follow 集的过程如下: 因为:s 是识别符号,且有 absd、bsac、dse,所以 follow(s)应包含first(d)first(ac) first(e) #=a,da,d,c,ee#=a,c,d,e#又因为 absd 和 d,所以 fo
25、llow 中还包含 follow(a)。因为 saabde 和 bsac,所以follow(a)=first(bde)first(c)=b,c综合、得 follow(s)=a,d,c,e,#a,b,c,d,e,#因为 absd,所以 follow(b)=first(sd)=a,d因为 saabde | d、absd| e 和 bsac | cd,所以follow(d)=first(e)follow(a)follow(b)=eb,ca,d=a,b,c,d,e(2)gs不是 ll(1)文法。因为产生式 bsac|cd| 中first(sac)follow(b)=a,d (3)构造 gs的 ll(1
26、)分析表。按照 ll(1)分析表的构造算法构造方法 gs的 ll(1)分析表如下表所示。表 gs的 ll(1)分析表4. 将文法 gv改造成为 ll(1)的。() gv:vn|neev|v+eni解答:对文法 gv提取公共左因子后得到文法:gv:vnaa|e evbb|+e ni求出文法 gv中每一个非终结符号的 first 集:first(v)=ifirst(a)=,first(e)=ifirst(b)=+,first(n)=i求出文法 gv中每一个非终结符号的 follow 集: follow(v)=#first(b)follow(e)=#,+, follow(a)= follow(v)=
27、+,#follow(e)= first()follow(b)= first()follow(e)= follow(b)= follow(e)= follow(n)= first(a)follow(v)=,+,#可以看到,对文法 gv的产生式 a|e,有first(e)follow(a)=+,#=对产生式 b|+e,有first(+e)follow(b)=+= 而文法的其他产生式都只有一个不为 的右部,所以文法 gv是 ll(1)文法。5已知文法:() ga: aaaa|(1) 该文法是 ll(1)文法吗?为什么?(2) 若采用 ll(1)方法进行语法分析,如何得到该文法的 ll(1)分析表?(
28、3) 若输入符号串“aaaa”,请给出语法分析过程。解答:(1)因为产生式 aaaa| 有空产生式右部,而follow(a)=#first(a)=a, #造成 first(a)follow(a)=a,a, #所以该文法不是 ll(1)文法。(2) 若采用 ll(1)方法进行语法分析,必须修改该文法。因该文法产生偶数(可以为 0)个 a,所以得到文法ga:aaaa|此时对产生式 aaaa|,有 follow(a)=#follow(a)=#,因而first(a)follow(a)=a,#= 所以文法 ga是 ll(1)文法, 按 ll(1)分析表构造算法构造该文法的 ll(1)分析表如下表所示。表
29、 文法 ga的 ll(1)分析表(3) 若采用 ll(1)方法进行语法分析, 对符号串“aaaa”的分析过程如下表所示。表 对符号串“aaaa”的分析过程6设有文法 gs为:()sa|b|(a) asda|s(1) 完成下列算符优先关系表,见下表,并判断 gs是否为算符优先文法。表 算符优先关系表(2) 给出句型(sdsds)的短语、简单短语、句柄、素短语和最左素短语。(3) 给出输入串(adb)#的分析过程。解答:(1)先求文法 gs的 firstvt 集和 lastvt 集: 由 sa|b|(a)得:firstvt(s)=a,b,( );由 asd 得 : firstvt(a)=d; 又
30、由 as 得 : firstvt(s) firstvt(a), 即firstvt(a)=d,a,b,(;由 sa|b|(a)得;lastvt(s)=a,b,;由ada 得:lastvt(a)=d,又由as 得:lastvt(s) lastvt(a),即lastvt(a)=d,a,b,)。构造优先关系表方法如下:对 pab,或 paqb,有 a b;对 par,而 bfirstvt(r),有 ab;对 prb,而 afirstvt(r),有 ab。由此得到:由 s(a)得:( );由 s(a得:(firstvt(a),即:( d,(a,( b,(;由 ada 得:dfirstvt(a), 即:d
31、d,da,d b,d(; 由 sa)得,lastvt(a),即:d),a),b),);由 asd得:lastvt(s)d,即:a d,bd,)d;此外,由#s#得:# #;由#firstvt(s)得:#a,# b,#(;由 lastvt(s)#得:d#,a#,b#,)#。最后得到算符优先关系表,见下表。表 算符优先关系表由上表可以看出,任何两个终结符之间至少只满足 、三种优先关系之一,故 gs为算符优先文法。(2) 为求出句型(sdsds)的短语、简单短语、句柄,我们先画出该句型对应的语法树,如下图所示。由图得到:短语:s,sds,sdsds,(sdsds)简单短语(即直接短语):s句柄(即最
32、左直接短语):s素短语:sds,它同时也是该句型的最左素短语。图 句型(sdsds)的语法树(3) 输入串(adb)#的分析过程见下表。表 输入串(adb)#的分析过程7设有文法 gs为:()sa|b|(a) asda|s(1) 完成下列算符优先关系表,见下表,并判断 gs是否为算符优先文法。表 算符优先关系表(2) 给出句型(sdsds)的短语、简单短语、句柄、素短语和最左素短语。(3) 给出输入串(adb)#的分析过程。解答:(1)先求文法 gs的 firstvt 集和 lastvt 集: 由 sa|b|(a)得:firstvt(s)=a,b,( );由 asd 得 : firstvt(a
33、)=d; 又 由 as 得 : firstvt(s) firstvt(a), 即firstvt(a)=d,a,b,(;由 sa|b|(a)得;lastvt(s)=a,b,;由ada 得:lastvt(a)=d,又由as 得:lastvt(s) lastvt(a),即lastvt(a)=d,a,b,)。构造优先关系表方法如下:对 pab,或 paqb,有 a b;对 par,而 bfirstvt(r),有 ab;对 prb,而 afirstvt(r),有 ab。由此得到:由 s(a)得:( );由 s(a得:(firstvt(a),即:( d,(a,( b,(;由 ada 得:dfirstvt(
34、a), 即:dd,da,d b,d(; 由 sa)得,lastvt(a),即:d),a),b),);由 asd得:lastvt(s)d,即:a d,bd,)d;此外,由#s#得:# #;由#firstvt(s)得:#a,# b,#(;由 lastvt(s)#得:d#,a#,b#,)#。最后得到算符优先关系表,见下表。表 算符优先关系表由上表可以看出,任何两个终结符之间至少只满足 、三种优先关系之一,故 gs为算符优先文法。(2) 为求出句型(sdsds)的短语、简单短语、句柄,我们先画出该句型对应的语法树,如下图所示。由图得到:短语:s,sds,sdsds,(sdsds)简单短语(即直接短语)
35、:s句柄(即最左直接短语):s素短语:sds,它同时也是该句型的最左素短语。图 句型(sdsds)的语法树(3) 输入串(adb)#的分析过程见下表。表 输入串(adb)#的分析过程8. 对于文法 gs: sas|basa|a(1) 列出所有 lr(0)项目;(2) 列出构成文法 lr(0)项目集规范族。() 解答:首先将文法 g 拓广为 gs:ss sas|b asa|a(1) 文法 gs的 lr(0)项目是:1ss5sas9asa2ss6sb10asa3sas7sb11aa4sas8asa12aa(2) 用 -closure(闭包)办法构造文法 g的 lr(0)项目集规范族如下:i0:1s
36、si3:9asai6:12aa3sas8asa8asa3sasi7: 7sb11aa6sb6sb11aai1:2ss9asai4:10.asa4.sas8asa3.sas11aa6.sb3.sas8.asa6.sb11.aai2:4sas3sasi5:5sas9asa6sb8asa8asa11aa11aa3sas6sb注意:i1 中的 ss和 asa 是由状态 i0 中的 1 和 3 读入一个 s 字符后得到的下一个项目;, 而 i4 中的 asa 和 aas 则是由 i3 中的 9 和 3 读入一个 a 字符后得到的下一个项目;i5 中的 sas和 asa 则是由 i4 中的 4 和 8 读
37、入一个 s 字符后得到的下一个项目。状态全体构成了文法 g的 lr(0)规范族。9. 有文法 gssa|(t)tt,s|s 该文法是否是 ll(1)文法,若不是,请进行改写。并给出它的分析表。() 解答:不是。tsttt,s|s first(s)=first(t)=a,(first(t)=,,follow(s)=#,,) follow(t)=follow(t)= )分析表如下:10. 有文法 gs(1) sa(2) sb(3) aaab(4) ac(5) babb(6) bd试构造相应的 lr(0)项目集规范族及相应的分析表。()解答:11. 已知文法 gs,其产生式如下:s(l)|al l,
38、s|s从 gs中消除左递归,并为之构造一个非递归预测分析器 ll(1)分析表。请说明在句子(a,(a,a)上的分析器的动作。 () 答:将所给文法消除左递归得 g:s (l)|a l sll ,sl | 实现预测分析器的不含递归调用的一种有效方法是使用一张分析表和一个栈进行联合控制,下面构造预测分析表:根据文法 g有first(s) = ( , a )follow(s) = ) , , , $ first(l) = ( , a )follow(l) = ) first(l) = , follow(l) = ) 按以上结果,构造预测分析表 m 如下:文法 g是 ll(1)的,因为它的 ll(1)
39、分析表不含多重定义入口。预测分析器对输入符号串(a, (a, a)做出的分析动作如下:12. 证明下面文法是 slr(1)文法,并构造其 slr 分析表。ee+t|tttf|fff*|a|b()答:该文法的拓广文法 g为(0) e e(1) e e+t(2) e t(3) t tf(4) t f(5) f f*(6) f a(7) f b其 lr(0)项目集规范族和 goto 函数(识别活前缀的 dfa)如下:i0 = ee, ee+t, et, ttf, tf, ff*,fa, fb i1 = ee, ee+ti2 = et, ttf, ff*, fa, fb i3 = tf, ff*i4
40、= fa i5 = fbi6 = ee+t, ttf, tf, ff*, fa, fb i7 = ttf, ff*i8 = ff*i9 = ee+t, ttf, ff*, fa, fb求 follow 集:follow(e)=, follow(t)=, , a, bfollow(f)=, , a, b, *构造的 slr 分析表如下:显然,此分析表无多重定义入口,所以此文法是 slr 文法第五章语法制导翻译技术和中间代码生成多项选择题:1. acde2. bcd 3. bc4. bd5. bce填空题:1. 中间代码有 (逆波兰记号)、(树形表示)、(三元式)、(四元式) 等形式,生成中间代码
41、主要是为了使 (目标代码的优化容易实现) 。()2. 语法制导翻译既可以用来产生 (中间) 代码,也可以用来产生 (目标) 指令,甚至可用来对输入串进行 (解释执行) 。()3. 当源程序中的标号出现“先引用后定义”时,中间代码的转移地址须持 (标号定义) 时才能确定,因而要进行 (回填) 。()4. 文法符号的属性有两种,一种称为 (继承属性) ,另一种称为 (综合属性) 。()5. 后缀式 abc-/所代表的表达式是( a/(b-c) ),表达式(a-b)*c 可用后缀式( ab-c* )表示。()6. 用一张 (间接码表) 辅以 (三元式表) 的办法来表示中间代码,这种表示法称为间接三元
42、式。()问答题:1给出下列表达式的逆波兰表示(后缀式):()a*(-b+c)(ab)(cde) 解答:abc+*;abcde2写出算术表达式:a+b*(c-d)+e/(c-d)n 的:()四元式序列;三元式序列;间接三元式序列解答:3. 写出下面算术表达式 e 值的语义描述: ()(1)ee1+e2(2)e0(3)e1 解答:e.val:=e.val+e2.val e.val:=0e.val:=14. 给出下列表达式的逆波兰表式。()(1) ab+cada+be(2) a=cb=d(3)(a*b-c)*n+b*(a+d/e) 解答:(1) abc+adab+e(2) ac=bd=(3) ab*
43、c-n*bade/+*+5. 分别写出语句 a:=b*-c+b*-c 的四元式、三元式和间接三元式的表示。() 解答:三地址语句的四元式表示oparg1arg2result(0)uminusct1(1)*bt1t2(2)uminusct3(3)*bt3t4(4)+t2t4t5(5)assignt5a三地址语句的三元式表示oparg1arg2(0)uminusc(1)*b(0)(2)uminusc(3)*b(2)(4)+(1)(3)(5)assigna(4)三地址语句的间接三元式表示(0)(14)(1)(15)(2)(16)(3)(17)(4)(18)(5)(19)oparg1arg2(14)uminusc(15)*b(14)(16)uminusc(17)*b(16)(18)+(15)(17)(19)assigna(18)6. 文法及其翻译方案为:p:=bqb print: ”1”q:=crprint: ”2”q:=a print: ”3”r:=qad print: ”4”当输入串为 bccaadadb 时,该翻译方案的输出是什么?() 答:3424217. 给定文法 ge :e:=t+e | tt:=f*t | ff:=i | (e)则求 i+i+(i*i)*i 的逆波兰表示。() 解答:iiii
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025甘肃稀土新材料股份有限公司招聘考前自测高频考点模拟试题附答案详解(模拟题)
- 公司小风电利用工测试考核试卷及答案
- 公司缝制机械调试工成本控制考核试卷及答案
- 水库溢洪道优化设计
- 公司实验动物饲养员入职考核试卷及答案
- 公司贵金属首饰手工制作工岗位轮适应力考核试卷及答案
- 公司煎酒工工具生命周期管理考核试卷及答案
- 公司洗衣师岗位技能考核试卷及答案
- 公司机动车检测工技能巩固考核试卷及答案
- 农作物副产品加工项目环保监测与评估方案
- 工地八大员岗位责任制度标牌
- 口腔门诊医疗废物管理制度
- 2025年广东中山市生态环境局所属事业单位招聘事业单位人员历年自考难、易点模拟试卷(共500题附带答案详解)
- 肾癌放射治疗
- 社会调查研究方法(第五版)课件 第二章 抽样设计
- 《英文海报的写法》课件
- 手术室实习生授课
- 破茧之路曙光初现-“十五五”高端医疗器械产业发展趋势及落地策略
- 我的家乡广东东莞
- 2024-2025学年甘肃省高一数学上学期期中考试卷
- IP语音电话系统方案
评论
0/150
提交评论