故选
5、如果文法G无二义性,则最左推导是先生长右边的枝叶:
对于
推导,则必然有二义性。
故选a。
6、选c。
7、由图2-8-1的语法树和优先关系可以看出应选bo
8、规范推导是最左推导,故选d。
9、由TtT,…和(…得FIRSTVT(T))={(,,)};
由TtS得FIRSTVT(S)?
FIRSTVT(T),而FIRSTVT(S)={b,A,(};即
FIRSTVT(T)={b,A,(,,};
因此选c。
10、d11、c12、b13、b14
、b
二、多项选择题
1、下面哪些说法是错误的。
a.有向图是一个状态转换图
b.状态转换图是一个有向图
c.有向图是一个DFA
可以用状态转换图表示
2、对无二义性文法来说,一棵语法树往往代表了。
a.多种推导过程b.多种最左推导过程c.一种最左推导过程
d.仅一种推导过程e.一种最左推导过程
3、如果文法G存在一个句子,满足下列条件之一时,则称该文法是二义文法。
a.该句子的最左推导与最右推导相同
b.该句子有两个不同的最左推导
c.该句子有两棵不同的最右推导
d.该句子有两棵不同的语法树
e.该句子的语法树只有一个
4、有一文法G:
StAB
AtaAb|e
BtcBd|e
它不产生下面集合。
a.{anbmcndm|n,m>0}
b.{a
c.{anbmcmdn|n,m>0}
d.{a
e.{anbncndn|n>0}
nbncmdm|n,m>0}
nbncmdmn,m>0}
三、填空题
是,它一定只出现在产生式的
2、最左推导是指每次都对句型中的
3、在语法分析中,最常见的两种方法一定是分析法,另一是分析法。
4、采用语法分析时,必须消除文法的左递归。
5、树代表推导过程,树代表归约过程。
6、自下而上分析法采用、归约、错误处理、等四种操作。
7、Chomsky把文法分为种类型,编译器构造中采用和文法,它们分别产
生
和
语言,并分别用
和
自动机识别所产生的语言。
解答1
、空集
终结符右
2
、最左
3
、自上而上
自下而上
4
、自上而上
5
、语法
分析
6
、移进
接受
7
、42型3型上下文无关语言
正规语言
下推自动机
有限
四、判断题
1、文法StaS|bR|&描述的语言是(a|bc)*()
FHcS
四、判断题
1、文法StaS|bR|&描述的语言是(a|bc)*()
FHcS
2、在自下而上的语法分析中,语法树与分析树一定相同。
()
3、二义文法不是上下文无关文法。
()
4、语法分析时必须先消除文法中的左递归。
()
5、规范归约和规范推导是互逆的两个过程。
()
6、一个文法所有句型的集合形成该文法所能接受的语言。
()
解答1、对2、错3、错4、错5、错6、错
五、简答题
1、句柄2、素短语3、语法树4、归约5、推导
[解答]
1、句柄:
一个句型的最左直接短语称为该句型的句柄。
2、素短语:
至少含有一个终结符的素短语,并且除它自身之外不再含任何更小的素短语。
3、语法树:
满足下面4个条件的树称之为文法G[S]的一棵语法树。
1每一终结均有一标记,此标记为VnUVt中的一个符号;
2树的根结点以文法G[S]的开始符S标记;
3若一结点至少有一个直接后继,则此结点上的标记为M中的一个符号;
4若一个以A为标记的结点有K个直接后继,且按从左至右的顺序,这些结点的标记分别为X,X2,…,Xk,贝UA~Xi,X2,…,Xk,必然是G的一个产生式。
4、归约:
我们称仏丫^直接归约出aAB,仅当A^y是一个产生式,且a、B€(VnUVt)*归约过程就是从输入串开始,反复用产生式右部的符号替换成产生式左部符号,直至文法开
始符。
5、推导:
我们称aAB直接推出ayB,即aABayB,仅当丫是一个产生式,且a、
(VnUVt)*。
如果a1a2…an,则我们称这个序列是从a1至a2的一个推导。
若存在
一个从a1an的推导,则称a1可推导出an。
推导是归约的逆过程。
六、问答题
1、给出上下文无关文法的定义。
[解答]
一个上下文无关文法G是一个四元式(Vt,Vn,S,P),其中:
•Vt是一个非空有限集,它的每个元素称为终结符号;
•Vn是一个非空有限集,它的每个元素称为非终结符号,VtAVn=①;
•S是一个非终结符号,称为开始符号;
•P是一个产生式集合(有限),每个产生式的形式是P^a,其中,P€Vn,a€(VtUVn)*。
开始符号S至少必须在某个产生式的左部出现一次。
2、文法G[S]:
StaSPQ|abQ
QP^PQ
bPrbb
bQtbc
cCHcc
(1)它是Chomsky哪一型文法
(2)它生成的语言是什么
[解答]
(1)由于产生式左部存在终结符号,且所有产生式左部符号的长度均小于等于产生式右部的符号长度,所以文法G[S]是Chomskyl型文法,即上下文有关文法。
(2)按产生式出现的顺序规定优先级由高到低(否则无法推出句子),我们可以得到:
SabQabc
SaSPQaabQPQaabPQQaabbQQaabbcQaabbcc
SaSPQaaSPQPQaaabQPQPQaaabPQQPQaaabPQPQQaaaPPQQQ
aaabbPqqqaaabbQQQaaabbbcQQaaabbbccQaaabbbccc
于是得到文法G[S]生成的语言L={anbncn|n>1}
3、按指定类型,给出语言的文法。
L={aibj|j>i>1}的上下文无关文法。
【解答】
(1)由L={aibj|j>i>1}知,所求该语言对应的上下文无关文法首先应有StaSb型产生式,
以保证b的个数不少于a的个数;其次,还需有StSb或StbS型的产生式,用以保证b的个数多
于a的个数;也即所求上下文无关文法G[S]为:
G[S]:
StaSb|Sb|b
4、有文法G:
StaAcB|Bd
AtAaB|c
BtbScA|b
(1)试求句型aAaBcbbdcc和aAcbBdcc的句柄;
(2)写出句子acabcbbdcc的最左推导过程。
【解答】
(1)分别画出对应两句型的语法树,如图2-8-2所示
句柄:
AaBBd
a
a
图2-8-2语法树
(2)句子acabcbbdcc的最左推导如下:
SaAcBaAaBcBacaBcBacabcBacabcbScAacabcbBdcA
语。
【解答】
5、对于文法G[S]:
tL,S|S
(L)|aS|a
①短语:
S、a、(a)、S,(a)、(S,(a));
②直接短语:
a、S;
③句柄:
S;
④素短语:
素短语可由图2-8-3中相邻终结符之间的优先关系求得,即;
#<(•v.(v,a>)>)•#
因此素短语为a。
6、考虑文法G[T]:
Ttt*F|F
FtftP|P
pt(T)|i
/|\
证明T*PT(T*F)是该文法的一个句型,并指出直接短语和句柄。
【解答】
I/1\
F
首先构造T*Pf(T*F)的语法树如图2-8-4所示。
由图2-8-4可知,T*Pf(T*F)是文法G[T]的一个句型。
直接短语有两个,即P和T*F;句柄为P。
4、状态转换图(见图3-6-1)接受的字集为
5、词法分析器作为独立的阶段使整个编译程序结构更加简洁、明确,因此,_。
a.词法分析器应作为独立的一遍b.词法分析器作为子程序较好
c.词法分析器分解为多个过程,由语法分析器选择使用d.词法分析器并不作为一个独立的阶段
解答1、b2、c
3、c
4、d5、b
二、多项选择题
1、在词法分析中,
能识别出
。
a.基本字
b.
四兀式c.运算符
d.逆波兰式
e.
常数
2、令刀={a,b},则刀上所有以b开头,后跟若干个ab的字的全体对应的正规式为
a.b(ab)*b.b(ab)+c.(ba)*b
d.(ba)+be.b(a|b)
解答1、a、c、e2、a、b、d
三、填空题
1、确定有限自动机DFA是的一个特例。
2、若二个正规式所表示的相同,则认为二者是等价的。
3、一个字集是正规的,当且仅当它可由所。
解答1、NFA2、正规集3、DFA(NFA所识别
四、判断题
1、一个有限状态自动机中,有且仅有一个唯一终态。
()
2、设r和s分别是正规式,则有L(r|s)=L(r)|L(s)。
()
3、自动机M和M'的状态数不同,则二者必不等价。
()
4、确定的自动机以及不确定的自动机都能正确地识别正规集。
()
5、对任意一个右线性文法G,都存在一个NFAM,满足L(G)=L(M)。
()
6、对任意一个右线性文法G,都存在一个DFAM,满足L(G)=L(M)。
()
7、对任何正规表达式e,都存在一个NFAM满足L(G)=L(e)。
()
8、对任何正规表达式e,都存在一个DFAM满足L(G)=L(e)。
()
解答1、2、3、错4、5、6、7、8正确
五、基本题
1、设M=({x,y},{a,b},f,x,{y})为一非确定的有限自动机,其中f定义如下:
f(x,b)={y}
f(y,b)={x,y}
f(x,a)={x,y}
f(y,a)=0
试构造相应的确定有限自动机M。
解答:
对照自动机的定义M=(S,工,f,S0,Z),由f的定义可知f(x,a)、f(y,b)均为多值函数,所以
是一非确定有限自动机,先画出NFAM相应的状态图,如图3-6-2所示。
b
用子集法构造状态转换矩阵表3-6-3所示。
I
Ia
Ib
{x}
{x,y}
{y}
{y}
一
{x,y}
{x,y}
{x,y}
{x,y}
将转换矩阵中的所有子集重新命名而形成表3-6-4所示的状态转换矩阵。
表3-6-4状态转换矩阵
a
b
0
2
1
1
一
2
2
2
2
即得到M=({0,1,2},{a,b},f,0,{1,2}),其状态转换图如图3-6-5所示。
将图3-6-5的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。
最后,得到如图3-6-6
所示化简DFAMo
2、对给定正规式b*(d|ad)(b|ab)+,构造其NFAM;
1、构造下面文法的LL
(1)分析表。
XTL
Ttint|real
LtidR
RT,idR|&
解答:
LL
(1)分析表见表4-3-1
分析虽然这个文法很简单,我们还是从求开始符号集合和后继符号集合开始。
FIRST(D)=FIRST(T)={int,real}FOLLOWD)=FOLLOV(L)={#}
FIRST(L)={id}FOLLOWT)={id}
FIRST(R)={,,£}FOLLOWR)={#}
有了上面每个非终结符的FIRST集合,填分析表时要计算一个产生式右部a的FIRST(a)就
不是件难事了。
填表时唯一要小心的时,&是产生式FTs右部的一个开始符号,而#在FOLLO(R)中,所
以FTs填在输入符号#的栏目中。
表4-3-1LL
(1)分析表
非终结符
输入符号
int
real
id
#
D
DTTL
DTTL
T
Ttint
Ttreal
L
LtidR
R
Rt,idR
Rte
2、下面文法G[S]是否为LL
(1)文法说明理由。
StAB|PQxAtxyBbc
PtdP|eQtaQ|e
解答:
该文法不是LL
(1)文法,见下面分析中的说明。
分析只有三个非终结符有两个选择。
1、P的两个右部dP和e的开始符号肯定不相交。
2、Q的两个右部aQ和e的开始符号肯定不相交。
3、对S来说,由于x€FIRST(AB),同时也有x€FIRST(PQx)(因为P和Q都可能为空)所以该文法不是LL
(1)文法。
3、设有以下文法:
G[S]:
StaAbDeld
AtBSD|e
BtSAc|cD|e
DtSe|e
(1)求出该文法的每一个非终结符U的FOLLOW集。
(2)该文法是LL
(1)文法吗
(3)构造C[S]的LL
(1)分析表。
解答:
(1)求文法的每一个非终结符U的FOLLOW集的过程如下:
因为:
1S是识别符号,且有AtBSDBtSAc、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)
FOLLO(A)=FIRST(bDe)UFIRST(c)={b,c}
综合①、②得FOLLO(S)={a,d,c,e,#}U{a,b,c,d,e,#}
因为AtBSD所以FOLLOW(B)=FIRST(SD)={a,d}
因为StaAbDe|d、AtBSD|e和BtSAc|cD,所以
FOLLOWD)=FIRST(e)UFOLLO(A)UFOLLO(B)
={e}U{b,c}U{a,d}={a,b,c,d,e}
(2)G[S]不是LL
(1)文法。
因为产生式BtSAc|cD|£中
FIRST(SAc)nFOLLO(B)={a,d}工?
(3)构造G[S]的LL
(1)分析表。
按照LL
(1)分析表的构造算法构造方法G[S]的LL
(1)分析表如表4-3-2所示。
表4-3-2G[S]的LL
(1)分析表
a
b
c
d
e
#
s
aAbDe
d
A
BSD
BSD
BSD
e
B
Sac/e
cD
Sac/e
D
Se/e
e
e
Se/e
e
4、将文法G[V]改造成为LL
(1)的。
G[V]:
VtN|N[E]
EtV|V+E
Nti
解答:
对文法G[V]提取公共左因子后得到文法:
G
'[V]:
VtNA
ATe|[E]
Etvb
bt£|+e
求出文法G'[V]中每一个非终结符号的FIRST集:
FIRST(V)={i}FIRST(A)={[,£}
FIRST(E)={i}FIRST(B)={+,£}
FIRST(N)={i}
求出文法G[V]中每一个非终结符号的FOLLOWI:
FOLLOW(V)={#}UFIRST(B)\{£}UFOLLOW(E)={#,+,]}
FOLLOW(A)=FOLLOW(V)={+,,#}
FOLLOW(E)=FIRST(])\{£}UFOLLOW(B)=FIRST(])\{£}UFOLLOW(E)={]}
FOLLOW(B)=FOLLOW(E)={]}
FOLLOW(N)=FIRST(A)\{£}UFOLLOW(V)={[,],+,#}
可以看到,对文法G[V]的产生式Ar£|[E],有
FIRST([E])AFOLLOW(A)={[}n{+,],#}=?
对产生式Br£|+e,有
FIRST(+E)nFOLLOW(B)={+}n{]}=?
而文法的其他产生式都只有一个不为&的右部,所以文法G[V]是LL
(1)文法。
5、已知文法:
G[A]:
AraAa|&
(1)该文法是LL
(1)文法吗为什么
(2)若采用LL
(1)方法进行语法分析,如何得到该文法的LL
(1)分析表
(3)若输入符号串“aaaa”,请给出语法分析过程。
解答:
(1)因为产生式AraAa|£有空产生式右部,而
FOLLOW(A)={#}UFIRST(a)={a,#}
造成FIRST(A)AFOLLOW(A)={A,£}A{a,#}工?
所以该文法不是LL
(1)文法。
(2)若采用LL
(1)方法进行语法分析,必须修改该文法。
因该文法产生偶数(可以为0)个a,所以得到文法
此时对产生式AtaaA|£,有FOLLOW(A)={#}UFOLLOW(A