编译原理-习题
基础
DFA
确定的有限自动机DFA M是一个五元组$M =(S,\sum,δ ,S_0 ,F )$
(1) S 是一个非空有限集,它的每个元素称为一个状态。
(2) $\sum$ 是一个有穷字母表,它的每个元素称为一个输入符号,所以也称为输入符号字母表。
(3) δ是状态转换函数,是在$S×\sum→S$上的单值映射。
(4) $s0, s0 ∈S$,是唯一的一个初态。
(5) $F, F\subseteq S$,可空,是一个终态集,终态也称可接受状态或结束状态。
NFA
定义 一个NFA M是五元式$M=(S,\sum,δ,S_0,F)$
$S$ 有穷非空状态集合
$\sum$ 有穷的输入字母表集合
δ 从$S\subseteq∑^→2S$映射$S_0\subseteq S$ 是S的非空子集,称为初始状态集合F S 是S的子集(可空),称为终止状态集合NFA和DFA的不同在于δ的值域是S的子集,δ:S Σ →2S开始状态有不止一个接受ε作为输入符号
正规式转DFA
1(0|1)*101
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19flowchart LR
A(A)--1-->B
B--$-->E
E--0-->E
E--1-->E
E--$-->D
D--1-->F
F--0-->G
G--1-->H((G))
- 1(1010\*|1(010)\*1)*0
```mermaid
flowchart LR
A(A)--1-->B
B--$-->C
C--$-->D
NFA确定化—子集法
对给定的NFA N构造一张表,表的构成如下:
(1)设$∑={ a1,…, ak }$,表的每行含有$k+1$列。
(2)置首行首列为$ε-closure(S_0)$。
(3)若某行首列状态子集已确定,记为I,则置该行 的第i+1列为$I_{ai}(i=1, …, k)$。
(4)检查该行所有状态子集,将未出现在第一列者 填入到后面空行的第一列。
(5)重复(3)(4)直到第一列中状态子集不再扩大为止(在第$i+1$列上的所有状态子集均已 在第一列上出现)。 此时,将该表看成是一个状态转换矩阵。
(6)将该状态转换矩阵中所有状态子集重新命名, 得到状态转换矩阵,其所示的是与 给定的NFA N 等价的DFA M(未化简的DFA)。