编译原理—词法分析构建DFA上下文无关文法LL分析提取正规式
Posted 之墨_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译原理—词法分析构建DFA上下文无关文法LL分析提取正规式相关的知识,希望对你有一定的参考价值。
编译原理—构建DFA/上下文无关文法/提取正规式
构建DFA
表示被
5
5
5整除的二进制串的
D
F
A
DFA
DFA
一个数
m
o
d
5
mod\\ 5
mod 5 结果为
0
,
1
,
2
,
3
,
4
0,1,2,3,4
0,1,2,3,4以此为
5
5
5 种状态。由于要
求是能被
5
5
5 整除的数,
0
m
o
d
5
=
0
0 mod 5 = 0
0mod5=0满足,故状态
0
0
0 为初始
&
\\&
&最终状态,状态表如下:
注意这里 + 0 、 + 1 +0、+1 +0、+1是对二进制串末尾而言,分别代表二进制串对应的十进制数乘 2 2 2以及乘 2 2 2再 + 1 +1 +1,例如 1000 = 8 D + 0 = 10000 = 1 6 D 1000=8_D+0=10000=16_D 1000=8D+0=10000=16D,原本 m o d 5 mod\\ 5 mod 5余 3 3 3,变成了余 1 1 1。
根据状态表构建
D
F
A
M
DFA\\ M
DFA M
上下文无关文法
给出对应的上下文无关文法
令
0
:
S
、
1
:
A
、
2
:
B
、
3
:
C
、
4
:
D
0:S、1:A、2:B、3:C、4:D
0:S、1:A、2:B、3:C、4:D
则根据
D
F
A
DFA
DFA给出上下文无关文法:
S
→
1
A
∣
0
S
∣
ϵ
A
→
0
B
∣
1
C
B
→
0
D
∣
1
S
C
→
0
A
∣
1
B
D
→
0
C
∣
1
D
S→1A|0S|\\epsilon\\\\ A→0B|1C\\\\ B→0D|1S\\\\ C→0A|1B\\\\ D→0C|1D
S→1A∣0S∣ϵA→0B∣1CB→0D∣1SC→0A∣1BD→0C∣1D
因为S是终态也是初态,所以有S→ε
词法分析
给出
F
i
r
s
t
First
First集与
F
o
l
l
o
w
Follow
Follow集
F
i
r
s
t
(
S
)
=
0
,
1
,
ϵ
F
i
r
s
t
(
A
)
=
F
i
r
s
t
(
B
)
=
F
i
r
s
t
(
C
)
=
F
i
r
s
t
(
D
)
=
0
,
1
F
o
l
l
o
w
(
S
)
=
F
o
l
l
o
w
(
A
、
B
、
C
、
D
)
=
$
First(S)=\\0,1,\\epsilon\\\\\\ First(A)=First(B)=First(C)=First(D)=\\0,1\\\\\\ Follow(S)=Follow(A、B、C、D)=\\$\\
First(S)=0,1,ϵFirst(A)=First(B)=First(C)=First(D)=0,1Follow(S)=Follow(A、B、C、D)=$
L L ( 1 ) LL(1) LL(1)分析
给出 L L ( 1 ) LL(1) LL(1)分析表
0 | 1 | $ | |
---|---|---|---|
S S S | S → 0 S S→0S S→0S | S → 1 A S→1A S→1A | S → ϵ S→\\epsilon S→ϵ |
A A A | A → 0 B A→0B A→0B | A → 1 C A→1C A→1C | |
B B B | B → 0 D B→0D B→0D | B → 1 S B→1S B→1S | |
C C C | C → 0 A C→0A C→0A | C → 1 B C→1B C→1B | |
D D D | D → 0 C D→0C D→0C | D → 1 D D→1D D→1D |
提取正规式
给出正规式
R
R
R,使得
L
(
R
)
=
L
(
M
)
L(R) = L(M)
L(R)=L(M)
由于状态转换图中到达终态
S
0
S0
S0的状态转换为
S
0
→
S
0
,
S
2
→
S
0
S0→S0, S2→S0
S0→S0,S2→S0
因此依次消去
S
4
、
S
3
、
S
1
、
S
2
S4、S3、S1、S2
S4、S3、S1、S2
S0和S2是新的初态和终态,S1是原来的S0
最终得到正规式
(
0
∣
1
(
10
)
∗
(
0
∣
11
)
(
0
1
∗
01
∣
0
1
∗
00
(
10
)
∗
(
0
∣
11
)
)
∗
1
)
∗
(0|1(10)^*(0|11)(01^*01|01^*00(10)^*(0|11))^*1)^*
(0∣1(10)∗(0∣11)(01∗01∣01∗00(10)∗(0∣11))∗1)∗
以上是关于编译原理—词法分析构建DFA上下文无关文法LL分析提取正规式的主要内容,如果未能解决你的问题,请参考以下文章