编译原理第2章习题课
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.构造正规式的DFA。(1)1(0|1)*101
NFA化为DFA:
状态转换表:
初态
化简后得:
(
2)(a|b)*(aa|bb)(a|b)*
NFA化为DFA:
a 所以,DFA为:
化简得:
b
1
NFA到DFA:
化简后得;
2.将下图确定化和最小化。
a
a
0 1
a,b
解: 首先取A=ε-CLOSURE({0})={0},NFA确定化后的状态矩阵为:
Q’a b
A{0}{0,1}{1}
B{0,1}{0,1}{1}
C{1}{0}
NFA确定化后的DFA为:
A B
a
b b
C
将A,B 合并得:
a b
A C
a
3.构造一个DFA,它接受∑={0,1}上所有满足如下条件的字符串,
每个1都有0直接跟在后边。
解:按题意相应的正规表达式是0*(0 | 10)*0*
构造相应的DFA,首先构造NFA为
0 0 0
εε
Y
1 0
用子集法确定化
DFA 为
1 1 0
4
4.给出NFA等价的正规式R。
方法一:首先将状态图转化为
得0,1
消去其余结点
、0,1
NFA等价的正规式为(0|1)*11
方法二:NFA→右线性文法→正规式
A→0A|1A|1B
B→1C
C→ε
A=0A+1A+1B
B=1
A=0A+1A+11
A=(0+1)*11→(0|1)*11
5.试证明正规式(a|b)*与正规式(a*|b*)*是等价的。
证明:
(1)
正规式(a|b)*的NFA
a
其最简DFA 为
=>
b
(2)正规式(a*|b*)*的 NFA 为:
其最简化DFA 为:
a
=>
b
b
DFA 的状态转换表:
由于这两个正规式的最小DFA 相同,所以正规式(a|b)*等价于正规式(a*|b*)*。
6.设字母表∑={a,b},给出∑上的正规式R=b*ab(b|ab)*。
(1)试构造状态最小化的DFA M,使得L(M)=L(R)。
(2)求右线性文法G,使L(G)=L(M)。
解: (1)构造NFA:
(2)将其化为DFA,转换矩阵为:
b
再将其最小化得:
b a
(2)对应的右线性文法G=({X,W,Y},{a,b},P,X)P: X→aW|bX W→b Y|b y→a W|bY|b
文法G[〈单词〉]为:
〈单词〉-〉〈标识符〉|〈整数〉
〈标识符〉-〉〈标识符〉〈字母〉|〈标识符〉〈数字〉|〈字母〉
〈整数〉-〉〈数字〉|〈整数〉〈数字〉
〈字母〉-〉A|B|C
〈数字〉|->1|2|3
(1)改写文法G为G’,使L(G’)=L(G)。
(2)给出相应的有穷自动机。
解:(1)令D代表单词,I代表标识符,Z代表整数,有G’(D):
D→I | Z
I→A | B | C | IA | IB | IC | I1 | I2 | I3
Z→1 | 2 | 3 | Z1 | Z2 | Z3
(2) 左线性文法G’所对应的有穷自动机为:
M=({S,D,I,Z},{1,2,3,A,B,C},f,S,{D})
f: f(S,A)=I, f(S,B)=I, f(S,C)=I
f(S,1)=Z f(S,2)=Z f(S,3)=Z
f(I,A)=I f(I,B)=I f(I,C)=I
f(I,1)=I f(I,2)=I f(I,3)=I f(I, ε)=I
f(Z,1)=Z f(Z,2)=Z f(Z,3)=Z f(Z, ε)=D
给出下述文法所对应的正规式。
S→0A|1B
A→1S|1
B→0S|0
解: 相应的正规式方程组为:
S=0A+1B ①
A=1S+1 ②
B=0S+0 ③
将②,③代入①,得
S=01S+01+10S+10 ④
对④使用求解规则,得 (01|10)* (01|10)为所求。
给出文法G[S],构造相应最小的DFA。
S->aS|bA|b
A-> aS
方法一:
S=aS+bA+b
A=aS
S=aS+baS+b S=(a+ba)*b
即:S=(a|ba)*b
正规式(a|ba)*b对应的NFA:
正规式(a|ba)*b对应的DFA:
化简后:
方法二:P43 右线性正规文法到有穷自动机的转换。
文法S->aS|bA|b
A-> aS
对应的NFA为:
M=({S,A,D},{a,b},f,{S},{D})
其中:f (S,a)=S, f(S,b)=A, f(S,b)=D, f(A,a)=S
其NFA图为: