编译原理复习题(经典)(3)

2020-04-17 07:53

确定化:

重新命名,令AB为B、AC为C、ABY为D得:

所以,可得DFA为:

23. 文法 S->a|^|(T) T->T,S|S

对 (a,(a,a) 和 (((a,a),^,(a)),a) 的最左推导。 解: 对(a,(a,a)的最左推导为: S=>(T) =>(T,S) =>(S,S) =>(a,S) =>(a,(T)) =>(a,(T,S)) =>(a,(S,S)) =>(a,(a,S)) =>(a,(a,a))

对(((a,a),^,(a)),a) 的最左推导为: S=>(T) =>(T,S) =>(S,S) =>((T),S)

=>((T,S),S) =>((T,S,S),S) =>((S,S,S),S)

=>(((T),S,S),S) =>(((T,S),S,S),S) =>(((S,S),S,S),S) =>(((a,S),S,S),S) =>(((a,a),S,S),S) =>(((a,a),^,S),S) =>(((a,a),^,(T)),S) =>(((a,a),^,(S)),S) =>(((a,a),^,(a)),S) =>(((a,a),^,(a)),a) 24. 文法: S->MH|a H->LSo| ε K->dML| ε L->eHf M->K|bLM

判断 G 是否为 LL(1) 文法,如果是,构造 LL(1) 分析表。 解:各符号的FIRST集和FOLLOW集为:

11

预测分析表为:

由于预测分析表中无多重入口,所以可判定文法是LL(1)的。 25.叙述由下列正规式描述的语言 (a)0(0|1)*0 (b)((ε|0)1*)* (c)(0|1)*0(0|1)(0|1) (d)0*10*10*10*

(e)(00|11)*((01|10)(00|11)*(01|10)(00|11)*)*

解:(a)以0开头、以0结尾的所有0和1的串。 (b)由0和1组成的串,包括空串。

(c)倒数第3个字符为0,由0和1组成的串。 (d)含有3个1的所有0和1的串。

(e)由偶数个0和偶数个1构成的所有0和1的串。

26.已知文法G[S]: S→(L)|a L→L,S|S

为句子(a,(a,a))构造最左推导和最右推导。 解:句子(a,(a,a))的最左推导为:

S=>(L)=>(L,S) =>(S,S)=>(a,S) =>(a,(L))=>(a,(L,S)) =(a,(S,S))=>(a,(a,S))=>(a,(a,a))

句子(a,(a,a))的最右推导为:

S=>(L)=>(L,S) =>(l,(L))=>(L,(L,S))=>(L,(L,a))=>(L,(S,a))=>(L,(a,a))=(S,(a,a))=(a,(a,a))

五.计算题

1.构造下述文法 G[S] 的自动机: S->A0

A->A0|S1|0

该自动机是确定的吗?若不确定,则对它确定化。

解:由于该文法的产生式S->A0,A->A0|S1中没有字符集VT的输入,所以不是确定的自动机。 要将其他确定化,必须先用代入法得到它对应的正规式。把S?A0代入产生式A?S1有:A=A0|A01|0=A(0|01)|0=0(0|01)*。 代入S->A0有该文法的正规式:0(0|01)*0,所以,改写该文法为确定的自动机为:

12

由于状态A有3次输入0的重复输入,所以上图只是NFA,下面将它确定化: 下表由子集法将NFADFA:

由上表可知DFA为:

2.对下面的文法 G : E->TE' E'->+E| ε T->FT' T' ->T| ε F-> PF' F'-> *F'| ε P->(E)|a|b|^

(1)计算这个文法的每个非终结符的 FIRST 集和 FOLLOW 集。 (2) 证明这个方法是 LL(1) 的。 (3) 构造它的预测分析表。 解:(1)计算这个文法的每个非终结符的FIRST集和FOLLOW集。 FIRST集合有:

FIRST(E)=FIRST(T)=FIRST(F)=FIRST(P)={(,a,b,^}; FIRST(E')={+,ε}

FIRST(T)=FIRST(F)=FIRST(P)={(,a,b,^}; FIRST(T')=FIRST(T)∪{ε}={(,a,b,^,ε}; FIRST(F)=FIRST(P)={(,a,b,^}; FIRST(F')=FIRST(P)={*,ε}; FIRST(P)={(,a,b,^}; FOLLOW集合有: FOLLOW(E)={),#};

FOLLOW(E')=FOLLOW(E)={),#};

FOLLOW(T)=FIRST(E')∪FOLLOW(E)={+,),#};//不包含ε FOLLOW(T')=FOLLOW(T)=FIRST(E')∪FOLLOW(E)={+,),#}; FOLLOW(F)=FIRST(T')∪FOLLOW(T)={(,a,b,^,+,),#};//不包含ε FOLLOW(F')=FOLLOW(F)=FIRST(T')∪FOLLOW(T)={(,a,b,^,+,),#}; FOLLOW(P)=FIRST(F')∪FOLLOW(F)={*,(,a,b,^,+,),#};//不包含ε (2)证明这个方法是LL(1)的。

13

各产生式的SELECT集合有:

SELECT(E->TE')=FIRST(T)={(,a,b,^}; SELECT(E'->+E)={+};

SELECT(E'->ε)=FOLLOW(E/)={),#} SELECT(T->FT')=FIRST(F)={(,a,b,^}; SELECT(T'->T)=FIRST(T)={(,a,b,^}; SELECT(T'->ε)=FOLLOW(T/)={+,),#}; SELECT(F->PF')=FIRST(P)={(,a,b,^}; SELECT(F'->*F')={*};

SELECT(F'->ε)=FOLLOW(F')={(,a,b,^,+,),#}; SELECT(P->(E))={(} SELECT(P->a)={a} SELECT(P->b)={b} SELECT(P->^)={^}

可见,相同左部产生式的SELECT集的交集均为空,所以文法G[E]是LL(1)文法。 (3)构造它的预测分析表。

文法G[E]的预测分析表如下:

3.已知 NFA= ( {x,y,z},{0,1},M,{x},{z} ),其中:

M(x,0)={z},M(y,0)={x,y},M(z,0)={x,z},M(x,1)={x}, M(y,1)= φ ,M(z,1)={y}, 构造相应的DFA并最小化。

解:根据题意有NFA图:

NFA

DFA

14

下面将该DFA最小化:

(1) 首先将它的状态集分成两个子集:P1={A,D,E},P2={B,C,F} (2) 区分P2:由于F(F,1)=F(C,1)=E,F(F,0)=F并且F(C,0)=C,所以F,C等价。由于F(B,0)=F(C,0)=C, F(B,1)=D,F(C,1)=E,而D,E不等价(见下步),从而B与C,F可以区分。有P21={C,F},P22={B}。 (3) 区分P1:由于A,E输入0到终态,而D输入0不到终态,所以D与A,E可以区分,有P11={A,E},P12={D}。 (4) 由于F(A,0)=B,F(E,0)=F,而B,F不等价,所以A,E可以区分。

(5) 综上所述,DFA可以区分为P={{A},{B},{D},{E},{C,F}}。所以最小化的DFA如下:

4. 已知文法为: S->a|^|(T) T->T,S|S

构造它的 LR(0)分析表。

解:加入非终结符S',方法的增广文法为: S'->S S->a S->^ S->(T) T->T,S

T->S 下面构造它的LR(0)项目集规范族为:

15


编译原理复习题(经典)(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:数字万用电表的使用

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: