完整版整理完编译原理网上作业题参考答案1101Word文档下载推荐.docx
- 文档编号:21900742
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:35
- 大小:205.50KB
完整版整理完编译原理网上作业题参考答案1101Word文档下载推荐.docx
《完整版整理完编译原理网上作业题参考答案1101Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《完整版整理完编译原理网上作业题参考答案1101Word文档下载推荐.docx(35页珍藏版)》请在冰豆网上搜索。
5.(语法)树代表推导过程,(分析)树代表归约过程。
6•自下而上分析法采用(移进)、归约、错误处理、(接受)等四种操作。
7.Chomsky把文法分为(4)种类型,编译器构造中采用(2型)和(3型)文法,它们分别产生(上下
文无关语言)和(正规语言)语言,并分别用(下推自动机)和(有限)自动机识别所产生的语言。
(*
*)
判断题:
1.正确2.错误3.错误4.错误5.错误
6.错误7.正确8.正确9.错误
简答题
1句柄:
解答:
一个句型的最左直接短语称为该句型的句柄。
2.素短语:
至少含有一个终结符的素短语,
并且除它自身之外不再含任何更小的素短语。
3.语法树:
满足下面4个条件的树称之为文法G[S]的一棵语法树。
1每一终结均有一标记,此标记为VnUVt中的一个符号;
2树的根结点以文法G[S]的开始符S标记;
3若一结点至少有一个直接后继,则此结点上的标记为Vn中的一个符号;
4若一个以A为标记的结点有K个直接后继,且按从左至右的顺序,这些结点的标记分别为
Xi,X2,…,准则A^Xi,X2,…,冶必然是G的一个产生式。
4.归约:
我们称仏丫直接归约出aA0仅当A^y是一个产生式,且a(VnUVt)*。
归约过程就是从输
入串开始,反复用产生式右部的符号替换成产生式左部符号,直至文法开始符。
5.推导:
我们称aAB直接推出%丫,俱卩aA3Tay仅当丫是一个产生式,
且a3€(VnUVt)*。
如果a=>
a—-…—a,则我们称这个序列是从ai至a的一个推导。
若存在一个从
alan的推导,则称ai可推导出
a。
推导是归约的逆过程。
问答题
1.给出上下文无关文法的定义。
一个上下文无关文法G是一个四元式(Vt,Vn,S,P),其中:
VtQVN=①;
ia,其中,P€VN,a€(VtUVn)。
开始符
号S至少必须在某个产生式的左部出现一次。
2.文法G[S]:
S^aSPQ|abQ
QiPQ
bibb
bCHbccCHcc
(1)它是Chomsky哪一型文法?
(2)它生成的语言是什么?
(***)
(1)由于产生式左部存在终结符号,且所有产生式左部符号的长度均小于等于产生式右部的符号长度,所以文法G[S]是Chomskyl型文法,即上下文有关文法。
(2)按产生式出现的顺序规定优先级由高到低(否则无法推出句子),我们可以得到:
S二;
abQ二abc
S二:
aSPQ二aabQP^^aabPQQ:
aabbQQ二:
aabbcQ二aabbcc
aSPQ二aaSPQPgaaabQPQPQ:
aaabPQQPQ:
aaabPQPQQaaaPPQQQaaabbPqqq二aaabbQQgaaabbbcQQ二aaabbbccQ二aaabbbccc
于是得到文法G[S]生成的语言L={anbncn|n>
1}
3.按指定类型,给出语言的文法。
L={aibj|j>
i>
1}的上下文无关文法。
由L={aibj|j>
1}知,所求该语言对应的上下文无关文法首先应有S^aSb型产生式,以保证b的
个数不少于a的个数;
其次,还需有StSb或StbS型的产生式,用以保证b的个数多于a的个数;
也即所求上下文无关文法G[S]为:
G[S]:
StaSb|Sb|b
4.有文法G:
StaAcB|Bd
AtAaB|cBtbScA|b
(1)试求句型aAaBcbbdcc和aAcbBdcc的句柄;
(2)写出句子acabcbbdcc的最左推导过程。
(***)
(1)分别画出对应两句型的语法树,如下图所示
句柄:
AaBBd
(2)句子acabcbbdcc的最左推导如下:
ST二aAcB二aAaBcB二acaBcB=acabcB二acabcbScA二acabcbBdcA二acabcbbdcA二acabcbbdcc
5.对于文法G[S]:
S~(L)|aS|a
LtL,S|S
(1)画出句型(S,(a))的语法树。
(2)写出上述句型的所有短语、直接短语、句柄和素短语。
(1)句型(S,(a))的语法树如下图所示。
(L)
图句型(S,(a))的语法树
(2)由上图可知:
1短语:
S、a、(a)、S,(a)、(S,(a));
2直接短语:
a、S;
3句柄:
S;
4素短语:
素短语可由图2-8-3中相邻终结符之间的优先关系求得,即;
#<
因此素短语为a。
6.考虑文法G[S],其产生式如下:
S^(L)|a
LtL,S|S
(a)试指出此文法的终结符号、非终结符号。
(b)给出句子(a,(a,a))的分析树。
(c)构造句子(a,(a,a))的一个最左推导。
(d)构造句子(a,(a,a))的一个最右推导。
(e)这个文法生成的语言是什么?
(**)
(a)终结符号为:
{(,),a,'
}
非终结符号为:
{S,L}
开始符号为:
S
(b)分析树
aL,S
(L)
(L,S)
(S'
E)
(s'
s)
(a,(L,S))
(a,(S,S))
(a,(a,S))
(-1)
S(P)
(L,(L))
(L,(L,S))
(L,(L,a))
(L,(S,a))
(L,(a,a))
(S,(a,a))
(a,(a,a))
(e)L(G[S])=(ai,a2,,an)或a
其中ai(1wiwn)是L(G[S])。
即L(G[S])产生一个以a为原子的纯表,但不包括空表。
7.考虑文法G[T]:
TF*F|F
FtFfP|P
P^(T)|i
证明T*Pf(T*F)是该文法的一个句型,并指出直接短语和句柄。
首先构造T*Pf(T*F)的语法树如下图所示。
T
图句型T*Pf(T*F)的语法树
由上图可知,T*Pf(T*F)是文法G[T]的一个句型。
直接短语有两个,即P和T*F;
句柄为P。
&
试描述下列文法产生的语言L(G[S])(**)
St10S0|aA
AtbA|a
L(G)={(10)iabna0in>
0i>
0}
9.已知语言L(G)={abnc|n>
1}试对该语言构造相应文法。
解答:
G[Z]:
ZtaBC
Bb|b
10.证明下列文法的二义性1.G[Z]
ZtaZbZ|aZ|a
2.G[S]
StAB
AtbB|bC|baBtSb|ba|aCtBb|b
(1)
对于句子aaaba,画出二棵不同的语法树,因而是二义的。
2)
G[S]
对于句子baba,画出二棵不同的语法树,因而是二义的。
11.有文法G[S]:
StiSeS|iS|i
该文法是否是二义的。
试证明之。
(**)解答:
对于句子iiiei,有两棵不同的语法树,故文法是二义的。
12.文法G[T]:
aR,FHTb|d生成的语言是什么?
G[T]是否为3型文法?
不是3型文法。
13.试写出能够描述下列电话号码格式的文法。
67391742
010-********
(010)67391742
文法产生式规则如下:
<
电话号码>
t<
局代码>
<
本机码>
t<
区前缀>
局代码
>
本机码>
t
地区码>
‘('
‘)'
地区码>
DIG
DIGDIG
14.试构造生成语言的上下文无关文法。
(1){anbnci|n>
1,i>
0}
(2){w|w€{a,b}+,且w中a的个数恰好比b多1}
(1)把anbnci分成anbn和c,两部分,分别由两个非终结符号生成,因此,生成此文法的产生式为:
StAB
AtaAb|ab
BtcB|e
(2)令S为开始符号,产生的w中a的个数恰好比b多一个,令E为一个非终结符号,产生含相同个数的a和b的所有串,则产生式如下:
StaE|Ea|bSS|SbS|SSb
EtaEbE|bEaE|£
15.
G[S]:
S->
SANDS|SOR
下面的二义性文法描述命题演算公式,为它写一个等价的非二义性文法。
S|NOTS|p|q|(S)(**)
SANDA|A
A->
AORB|B
B->
NOTB|p|q|(S)
16.对于下列语言分别写出它们的正规表达式。
(1)英文字母组成的所有符号串,要求符号串中顺序包含五个元音。
(2)英文字母组成的所有符号串,要求符号串中的字母依照词典顺序排列。
(1)令Letter表示除这五个元音外的其它字母。
((letter)*A(letter)*E(letter)*l(letter)*O(letter)*U(letter))*
(2)A*B*....Z*
第三章词法分析与有穷自动机
1.ACE2.ABD
1.确定有限自动机DFA是(NFA)的一个特例。
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,y}f(a,b)={y}
f(y,a)=0f(y,b)={x,y}
试构造相应的确定有限自动机M。
对照自动机的定义M=(S,X,f,So,z),由f的定义可知f(x,a)、f(y,b)均为多值函数,所以是一非确定有限自动机,先画出NFAM相应的状态图,如图下所示。
图NFAM
用子集法构造状态转换矩阵下表所示。
将转换矩阵中的所有子集重新命名而形成下表所示的状态转换矩阵。
表状态转换矩阵
即得到M=({0,1,2},{a,b},f,0,{1,2}),其状态转换图如下图所示。
将上图的DFAM最小化。
首先,将M的状态分成终态组{1,2}与非终态组{0};
其次,考察{1,2}。
由于{1,2}a={1,2}b={2}
{1,2},所以不再将其划分了,也即
整个划分只有两组{0},{1,2}:
令状态1代表{1,2},即把原来到达2的弧都导向1,并删除状态2。
最后,
得到如下图所示化简DFAM。
图化简后的DFAM
2•对给定正规式b*(d|ad)(b|ab)+,构造其NFAM。
首先用A+=AA*改造正规式得:
b*(d|ad)(b|ab)(b|ab)*;
其次,构造该正规式的NFAM,如下图所示。
3•字母表{a,b}上的正规式R=(ba|a)*,构造R的相应DFA。
(**)解答:
4.请写出在E=(a,b)上,不是
最少的DFA。
根据题意,不以a开头就意味着以b开头,且以aa结尾的正规式为:
b(a|b)*aa
根将图1所示的NFA确定化,如图2所示。
NFA将图1所示的NFA确定化,如图
从图2可知已为最简状态,由于开始状态0只能输入字符b而不能与状态1合并,而状态2和状态3面对输入符号的下一状态相同,但两者一为非终态、一为终态,故也不有合并,故图2所示的状态转换矩阵已是最简的DFA,如图3所示据正规式画出NFA,如图1所示。
图2状态转换矩阵
5.人运狼、羊、菜过河,一次运一件,不让羊吃掉菜,也不让狼吃掉羊,画出渡河的状态转换图。
可否
将其抽象为一个有限自动机。
先写出渡河的方法,串中对象顺序为人来回渡河时所运的货物的顺序:
①羊空菜羊狼空羊
②羊空狼羊菜空羊
现给出一个NFA:
M=(S,Q,0,{9},S)
其中》={羊,空,菜,狼}
Q={0,1,2,3,4,5,6,7,8,9}
转形函数
S(0,羊)=1,S(1,空)=2,S(2,菜)=3,S(2,狼)=5
S(3,羊)=4,S(5,羊)=6,S(4,狼)=7,S(6,菜)=7
6•对于正规表达式(a|b)*a(a|b)构造最小状态的DFA(**)
①NFAM:
②DFAM:
③化简:
②中的DFAM中没有等价状态,因此为最小化的DFAM
第四章语法分析
1.AD2.CE3.ACDE4.CE5.ABCE6.ACDE
1•对于一个文法,如果能够构造(LR(0)文法)。
使得它的(每个入口)均是唯一确定的,则称该文
法为LR文法。
2.字的前缀是指该字的(任意首部)。
3.活前缀是指(规范句型)的一个前缀,这种前缀不含(句柄)之后的任何符号。
4.在LR分析过程中,只要(输入串)的已扫描部分保持可归约成一个(活前缀),则扫描过的部分
正确。
5.将识别(活前缀)的NFA确定化,使其成为以(项目集合)为状态的DFA这个DFA就是建立(LR
分析算法)的基础。
6.A^a・称为(归约)项目;
对文法开始符S'
fa・为(接受)项目;
若a为终结符,则称A^a・a3为(移进)项目;
若B为非终结符,则称A^a・a3为(待约)项目。
7.LR(0)分析法的名字中“L”表示(自左至右分析),“R'
表示(采用最右推导的逆过程即最左
归约),“0”表示(向右查看0个字符)。
1.正确
简答题:
1构造下面文法的LL
(1)分析表。
XTL
Ttint|real
LtidR
Rt,idR|£
LL
(1)分析表见下表。
分析虽然这个文法很简单,我们还是从求开始符号集合和后继符号集合开始。
FIRST(D)=FIRST(T)={int,real}FOLLOW(D)=FOLLOW(L)
={#}
FIRST(L)={id}FOLLOW(T)={id}
FIRST(R)={,,£
}FOLLOW(R)={#}
有了上面每个非终结符的FIRST集合,填分析表时要计算一个产生式右部a的FIRST(a)就不是件
难事了。
填表时唯一要小心的时,&
是产生式FT&
右部的一个开始符号,而#在FOLLOW(R)中,所以FTs
填在输入符号#的栏目中。
表LL
(1)分析表
2.下面文法G[S]是否为LL
(1)文法?
说明理由。
StAB|PQxAtxybe
P^dP|eQ^aQ|e
该文法不是LL
(1)文法,见下面分析中的说明。
分析只有三个非终结符有两个选择。
(1)P的两个右部dP和e的开始符号肯定不相交。
(2)Q的两个右部aQ和e的开始符号肯定不相交。
(3)对S来说,由于x€FIRST(AB),同时也有x€FIRST(PQx)(因为P和Q都可能为空)。
所以该文法不是LL
(1)文法。
3.设有以下文法:
StaAbDeld
atBSD|e
BtSAc|cD|e
DTSe|e
(1)求出该文法的每一个非终结符U的FOLLOW集。
(2)该文法是LL
(1)文法吗?
(3)构造C[S]的LL
(1)分析表。
(1)求文法的每一个非终结符U的FOLLOW集的过程如下:
因为:
1S是识别符号,且有AtBSD、Btsac、DTSe,所以FOLLOW(S)应包含
FIRST(D)UFIRST(Ac)UFIRST(e)U{#}
={a,d}U{a,d,c,e}U{e}U{#}
={a,c,d,e#}
2又因为AtbSD和DTe,所以FOLLOW中还包含FOLLOW(A)。
因为StaAbDe和BtSAc,所以
FOLLOW(A)=FIRST(bDe)UFIRST(e)={b,e}
综合①、②得FOLLOW(S)={a,d,e,e,#}U{a,b,e,d,e,#}
因为AtBSD,所以FOLLOW(B)=FIRST(SD)={a,d}
因为StaAbDe|d、AtBSD|e和BtSAc|eD,所以
FOLLOW(D)=FIRST(e)UFOLLOW(A)UFOLLOW(B)
={e}U{b,e}U{a,d}={a,b,e,d,e}
(2)G[S]不是LL
(1)文法。
因为产生式BtSAc|cD|e中
FIRST(SAc)nFOLLOW(B)={a,d}工
(3)构造G[S]的LL
(1)分析表。
按照LL
(1)分析表的构造算法构造方法G[S]的LL
(1)分析表如下表所示。
表G[S]的LL
(1)分析表
4.将文法G[V]改造成为LL
(1)的。
G[V]:
SN|N[E]
iV|V+E
NRi
对文法G[V]提取公共左因子后得到文法:
G'
[V]:
SNA
Af|[E]
iVB
Bf|+E
求出文法G[V中每一个非终结符号的FIRST集:
FIRST(V)={i}FIRST(A)={[,£
}
FIRST(E)={i}FIRST(B)={+,£
FIRST(N)={i}
求出文法G[V中每一个非终结符号的FOLLOW集:
FOLLOW(V)={#}U{£
}UFOLLOW(E)={#,+,]}
FOLLOW(A)=FOLLOW(V)={+,,#}
{£
}U{sUFOLLOW(E)={]}
FOLLOW(B)=FOLLOW(E)={]}
{s}UFOLLOW(V)={[,],+,#}
可以看到,对文法G[V]的产生式A^s|[E],有
FIRST([E])AFOLLOW(A)={[}A{+,],#}=对产生式B^s|+E有
FIRST(+E)AFOLLOW(B)={+A}{]}=
而文法的其他产生式都只有一个不为s的右部,所以文法G[V是LL
(1)文法。
5.已知文法:
G[A]:
A^aAa|&
(1)该文法是LL
(1)文法吗?
为什么?
(2)若采用LL
(1)方法进行语法分析,如何得到该文法的LL
(1)分析表?
(3)若输入符号串“aaaa”请给出语法分析过程。
(1)因为产生式AtaAa|&
有空产生式右部,而
FOLLOW(A)={#}UFIRST(a)={a,#}
造成FIRST(A)nFOLLOW(A)={A&
}n{a,#}工
所以该文法不是LL
(1)文法。
(2)若采用LL
(1)方法进行语法分析,必须修改该文法。
因该文法产生偶数(可以为0)个a,所以得到文法
G[A:
ZaaA|£
此时对产生式2aaA|£
有FOLLOW(A)={#}UFOLLOW(A)={#},因而
FIRST(A)nFOLLOW(A)={a,&
}n{#}=
所以文法G[A是LL
(1)文法,按LL
(1)分析表构造算法构造该文法的LL
(1)分析表如下表所
示。
表文法G[A]的LL⑴分析表
(3)若采用LL
(1)方法进行语法分析,对符号
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整版 整理 编译 原理 网上 作业题 参考答案 1101