知識點總結:
1 | 正規文法產生式的形式為A→aB或則A→a |
2 | ‘|’為或等同於算數里的加,‘.’為連接等同於算數里的乘,‘*’為閉包等同於算數里的冪 |
3 | 標識符的正規式為‘l(l|d)*’,常整數的正規為‘dd*’ |
4 | 正規文法和正規式可以互相轉換 |
5 | 三個重要的規則:A→xB B→y 正規式為A=xy A→xA|y 正規式為A=x*y A→x A→y 正規式為A=x|y |
1.分別寫出描述以下語言的正規文法和正規式:
L1={abna|n≥0}
L2={ambn|n≥1,m ≥1}
L2={(ab)n|n≥1}
∵正規文法的每一個產生式的形式都是A→aB或者是A→a
①設文法G(S)={abna|n≥0}
∴S->aA
A->Ba
B->bn
B->bB|ε
正規式
ab*a
②設文法G(S)={ambn|n≥1,m ≥1}
∴S->AB
A->aA|a
B->bB|b
正規式
aa*bb*
③設文法G(S)={(ab)n|n≥1}
∴S->(A)A|(A)
A->(ab)
正規式
(ab)(ab)*
2.將以下正規文法轉換到正規式
(1)Z→0A
A→0A|0B
B→1A|ε
①答:
由題可知:
A=0A+0(1A+ε)
A=0A+01A+0ε=0A+01A+0=(0+01)A+0
令x=(0+01),y=0,根據規則A→xA|y轉換為正規式為A=x*y
∴A=x*y=(0+01)*0
Z=0(0+01)*0=0(0|01)*0
(2)Z→U0|V1
U→Z1|1
V→Z0|0
答:
∵V→Z0|0
∴V=00*
∵U→Z1|1
∴U=11*
∴Z=11*0+00*1=1(1*0+00*)=1(1*0|00*)
∴Z=1(1*0|00*)
(3)S→aA
A→bA|aB|b
B→aA
答:
由題可得:
A=bA+aaA+b=(b+aa)A+b
相當於A->xB|y,轉換為規則式為A=x*y
∴A=(b+aa)*b
∵S->aA
∴S=a(b+aa)*b=a(b|aa)*b
(4)I→l|Il|Id
答:
I=l+Il+Id=I(l+d)+l
相當於I->Ix|y,轉換為規則式為I=yx*
∴I=l(l+d)*=l(l|d)*
∴I=l(l|d)*