有限自动机和右线性文法笔记
有限自动机和右线性文法笔记
有限自动机
有限状态系统和有限自动机
有限状态自动机简称有限自动机,是一种具有离散输入输出系统的数学模型
有限状态系统具有任意有限数目的内部状态
状态转换:每当在某个状态读入一个字符时,便使状态改变为另一个状态,改变后的状态称为后继状态
状态转换的三种情况:(1)转换到自身;(2)转换的后继状态只有一个;(3)转换的后继状态有若干个
根据不同状态转换情况,将有限自动机分为确定的有限自动机DFA(Deterministic Finite Automaton)和不确定的有限自动机NFA(Non-deterministic Finite Automaton)
DFA:每次转换的后继状态都唯一的有限状态自动机
NFA:转换的后继状态不是唯一的有限状态自动机
形式定义确定的有限自动机
一台有限自动机可以由形式定义描述成以下五部分的表:
(1)状态集 Q Q Q 有限状态的集合
(2)输入字母表 T T T 允许的输入符号
(3)动作规则 δ \delta δ 状态转换的规则
(4)起始状态 q 0 q_0 q0
(5)接收状态集 F F F
形式定义确定的有限自动机DFA
确定的有限自动机DFA是一个五元组 M = ( Q , T , δ , q 0 , F ) M=(Q,T,\delta,q_0,F) M=(Q,T,δ,q0,F)
其中,
- Q Q Q:有限状态的集合;
- T T T:有限的输入字母表;
- δ \delta δ:转换函数,从 Q Q Q × \times × T T T到 Q Q Q的映射;
- q 0 q_0 q0 :初始状态, q 0 q_0 q0 ∈ \in ∈ Q Q Q
- F F F:终止状态集, F F F ⊆ \subseteq ⊆ Q Q Q
需要注意,以上讨论的转换函数 δ \delta δ实在一个状态下仅仅输入一个字符的转换函数
当输入一个字符串时,转换函数用 δ ′ \delta' δ′表示,显然 δ ‘ \delta‘ δ‘是从 Q Q Q × \times × T ∗ T^* T∗到 Q Q Q的映射
δ ‘ \delta‘ δ‘的定义:
- 对 ϵ \epsilon ϵ ∈ \in ∈ T ∗ T^* T∗,有 δ ′ \delta' δ′ ( ( ( q q q, ϵ \epsilon ϵ) = = = q q q;
- 对任意 a a a ∈ \in ∈ T T T和 ω \omega ω ∈ \in ∈ T ∗ T^* T∗,有 δ ′ \delta' δ′ ( ( ( q q q, ω \omega ω a a a) = = = δ \delta δ ( ( ( δ ′ \delta' δ′ ( ( ( q q q, ω \omega ω ) ) ), a a a ) ) )
如果有 δ ′ \delta' δ′ ( ( ( q 0 q_0 q0, ω \omega ω ) ) )= p p p, p p p ∈ \in ∈ F F F,那么称字符串 ω \omega ω被有限自动机 M M M接受,而 L L L ( ( ( M M M ) ) )则表示 M M M接受的语言,表示为 L ( M ) = { ω ∣ δ ′ ( q 0 , ω ) ∈ F } L(M)=\{{\omega|\delta'(q_0,\omega)\in{F}}\} L(M)={ω∣δ′(q0,ω)∈F}
确定的有限自动机转换函数的描述方法
状态转换图
直接描述转换函数
δ \delta δ ( ( ( q 0 q_0 q0 , , , a a a ) ) ) = = = q 1 q_1 q1, δ \delta δ ( ( ( q 0 q_0 q0 , , , b b b ) ) ) = = = q 2 q_2 q2
δ \delta δ ( ( ( q 1 q_1 q1 , , , a a a ) ) ) = = = q 3 q_3 q3 , , , δ \delta δ ( ( ( q 1 q_1 q1 , , , b b b ) ) ) = = = q 1 q_1 q1
δ \delta δ ( ( ( q 2 q_2 q2 , , , a a a ) ) ) = = = q 2 q_2 q2, δ \delta δ ( ( ( q 2 q_2 q2 , , , b b b ) ) ) = = = q 3 q_3 q3
δ \delta δ ( ( ( q 3 q_3 q3 , , , a a a ) ) ) = = = ϕ \phi ϕ, δ \delta δ ( ( ( q 3 q_3 q3 , , , b b b ) ) ) = = = ϕ \phi ϕ
转换函数表
a a a | b b b | |
---|---|---|
q 0 q_0 q0 | q 1 q_1 q1 | q 2 q_2 q2 |
q 1 q_1 q1 | q 3 q_3 q3 | q 1 q_1 q1 |
q 2 q_2 q2 | q 2 q_2 q2 | q 3 q_3 q3 |
q 3 q_3 q3 | ϕ \phi ϕ | ϕ \phi ϕ |
不确定的有限自动机
形式定义不确定的有限自动机
形式定义不确定的有限自动机NFA
确定的有限自动机DFA是一个五元组 M = ( Q , T , δ , q 0 , F ) M=(Q,T,\delta,q_0,F) M=(Q,T,δ,q0,F)
其中,
- Q Q Q:有限状态的集合;
- T T T:有限的输入字母表;
- δ \delta δ:转换函数,从 Q Q Q × \times × T T T到 2 Q 2^Q 2Q的映射;(当NFA在某一个状态下输入一个字符时,可转换的后继状态是 Q Q Q的一个子集)
- q 0 q_0 q0 :初始状态, q 0 q_0 q0 ∈ \in ∈ Q Q Q
- F F F:终止状态集, F F F ⊆ \subseteq ⊆ Q Q Q
与DFA相似,当NFA在某一个状态下输入了一个字符串时,其转换函数 δ \delta δ应改为 δ ′ \delta' δ′
δ ′ \delta' δ′的定义如下 - 对 ϵ \epsilon ϵ ∈ \in ∈ T ∗ T^* T∗,有 δ ′ \delta' δ′ ( ( ( q q q, ϵ \epsilon ϵ) = = = q q q;
- 对任意 a a a ∈ \in ∈ T T T和 ω \omega ω ∈ \in ∈ T ∗ T^* T∗,有 δ ′ \delta' δ′ ( ( ( q q q, ω \omega ω a a a) = = ={ p p p|对 δ ′ \delta' δ′ ( ( ( q q q, ω \omega ω ) ) )中某状态 r r r,且 p p p在 δ \delta δ ( ( ( r r r, a a a ) ) )内};
- δ ′ \delta' δ′ ( ( ( P P P, ω \omega ω ) ) )= ⋃ q ∈ P \bigcup_{q\in{P}} ⋃q∈P δ ′ \delta' δ′ ( ( ( q q q, ω \omega ω ) ) ), P P P ⊆ \subseteq ⊆ Q Q Q
NFA可接受的语言为 L ( M ) = { ω ∣ δ ′ ( q 0 , ω ) 含 F 中 的 一 个 状 态 } L(M)=\{\omega|\delta'(q_0,\omega)含F中的一个状态\} L(M)={ω∣δ′(q0,ω)含F中的一个状态}
不确定的有限自动机转换函数描述方法
状态转移图
直接描述转移函数
δ \delta δ ( ( ( q 0 q_0 q0, a a a ) ) )={ q 0 q_0 q0, q 1 q_1 q1}, δ \delta δ ( ( ( q 0 q_0 q0, b b b ) ) )={ q 0 q_0 q0, q 3 q_3 q3}, δ \delta δ ( ( ( q 0 q_0 q0, c c c ) ) )={ q 0 q_0 q0, q 5 q_5 q5}
δ \delta δ ( ( ( q 1 q_1 q1, a a a ) ) )={ q 2 q_2 q2}, δ \delta δ ( ( ( q 1 q_1 q1, b b b ) ) )= ϕ \phi ϕ, δ \delta δ ( ( ( q 1 q_1 q1, c c c ) ) )= ϕ \phi ϕ
δ \delta δ ( ( ( q 2 q_2 q2, a a a ) ) )={ q 2 q_2 q2}, δ \delta δ ( ( ( q 2 q_2 q2, b b b ) ) )={ q 2 q_2 q2}, δ \delta δ ( ( ( q 2 q_2 q2, c c c ) ) )={ q 2 q_2 q2}
δ \delta δ ( ( ( q 3 q_3 q3, a a a ) ) )= ϕ \phi ϕ, δ \delta δ ( ( ( q 3 q_3 q3, b b b ) ) )={ q 4 q_4 q4}, δ \delta δ ( ( ( q 3 q_3 q3, c c c ) ) )= ϕ \phi ϕ
δ \delta δ ( ( ( q 4 q_4 q4, a a a ) ) )={ q 4 q_4 q4}, δ \delta δ ( ( ( q 4 q_4 q4, b b b ) ) )={ q 4 q_4 q4}, δ \delta δ ( ( ( q 4 q_4 q4, c c c ) ) )={ q 4 q_4 q4}
δ \delta δ ( ( ( q 5 q_5 q5, a a a ) ) )= ϕ \phi ϕ, δ \delta δ ( ( ( q 5 q_5 q5, b b b ) ) )= ϕ \phi ϕ, δ \delta δ ( ( ( q 5 q_5 q5, c c c ) ) )={ q 6 q_6 q6}
δ \delta δ ( ( ( q 6 q_6 q6, a a a ) ) )={ q 6 q_6 q6}, δ \delta δ ( ( ( q 6 q_6 q6, b b b ) ) )={ q 6 q_6 q6}, δ \delta δ ( ( ( q 6 q_6 q6, c c c ) ) )={ q 6 q_6 q6}
转换函数表
a a a | b b b | c c c | |
---|---|---|---|
q 0 q_0 q0 | { q 0 q_0 q0, q 1 q_1 q1} | { q 0 q_0 q0, q 3 q_3 q3} | { q 0 q_0 q0, q 5 q_5 q5} |
q 1 q_1 q1 | { q 2 q_2 q2} | ϕ \phi ϕ | ϕ \phi ϕ |
q 2 q_2 q2 | { q 2 q_2 q2} | { q 2 q_2 q2} | { q 2 q_2 q2} |
q 3 q_3 q3 | ϕ \phi ϕ | { q 4 q_4 q4} | ϕ \phi ϕ |
q 4 q_4 q4 | { q 4 q_4 q4} | { q 4 q_4 q4} | { q 4 q_4 q4} |
q 5 q_5 q5 | ϕ \phi ϕ | ϕ \phi ϕ | { q 6 q_6 q6} |
q 6 q_6 q6 | { q 6 q_6 q6} | { q 6 q_6 q6} | { q 6 q_6 q6} |
DFA和NFA的等效
如果两台机器识别相同的语言,则称他们是等价的
确定性和不确定性有限自动机能识别相同的语言类。
DFA是NFA的特例,所以DFA能接受的语言必能被NFA所接受;相反,NFA接受的语言,则能找到一个等效的DFA接受该语言
定理 设 L L L ( ( ( M N M_N MN ) ) )是由不确定的有限自动机 M N M_N MN接受的语言,则存在一台确定的有限自动机 M D M_D MD接受 L L L ( ( ( M D M_D MD ) ) ),满足 L L L ( ( ( M D M_D MD ) ) )= L L L ( ( ( M N M_N MN ) ) )
子集构造法
例:设NFA M = ( Q , T , δ , q 0 , F ) M=(Q,T,\delta,q_0,F) M=(Q,T,δ,q0,F),其中 Q Q Q={ q 0 q_0 q0, q q q}, T T T={ a a a, b b b}, F F F={ q q q}, δ \delta δ如表所示, M M M的状态转换图。找出等效的DFA M D M_D MD
a a a | b b b | |
---|---|---|
q 0 q_0 q0 | { q 0 q_0 q0, q q q} | { q q q} |
q q q | ϕ \phi ϕ | { q 0 q_0 q0, q q q} |
Sol. 构造一个接受 L L L ( ( ( M M M ) ) )的DFA L L L ( ( ( M D M_D MD ) ) )= ( Q D , T , δ D , q 0 D , F D ) (Q_D,T,\delta_D,q_{0D},F_D) (QD,T,δD,q0D,FD),其中
Q D = ( [ q 0 ] , [ q ] , [ q 0 , q ] , ϕ ) Q_D=([q_0],[q],[q_0,q],\phi) QD=([q0],[q],[q0,q],ϕ) q 0 D = [ q 0 ] q_{0D}=[q_0] q0D=[q0] F D = ( [ q ] , [ q 0 , q ] ) F_D=([q],[q_0,q]) FD=([q],[q0,q]) δ D \delta_D δD的定义如下,
由于 δ \delta δ ( ( ( q 0 q_0 q0, a a a ) ) )={ q 0 q_0 q0, q q q},则有 δ D \delta_D δD ( ( ([ q 0 q_0 q0, a a a] ) ) )= [ [ [ q 0 q_0 q0, q q q ] ] ];
由于 δ \delta δ ( ( ( q 0 q_0 q0, b b b ) ) )={ q q q},则有 δ D \delta_D δD ( ( ([ q 0 q_0 q0, b b b] ) ) )= [ [ [ q q q ] ] ];
由于 δ \delta δ ( ( ( q q q, a a a ) ) )= ϕ \phi ϕ,则有 δ D \delta_D δD ( ( ([ q q q, a a a] ) ) )= ϕ \phi ϕ;
由于 δ \delta δ ( ( ( q q q, b b b ) ) )={ q 0 q_0 q0, q q q},则有 δ D \delta_D δD ( ( ([ q q q, b b b] ) ) )={ q 0 q_0 q0, q q q};
由于 δ \delta δ ( ( ({ q 0 q_0 q0, q q q}, a a a ) ) )= δ \delta δ ( ( ( q 0 q_0 q0, a a a ) ) ) ⋃ \bigcup ⋃ δ \delta δ ( ( ( q q q, a a a ) ) )={ q 0 q_0 q0, q q q} ⋃ \bigcup ⋃ ϕ \phi ϕ={ q 0 q_0 q0, q q q},则有 δ D \delta_D δD ( ( ([ q 0 q_0 q0, q q q], a a a ) ) )= [ [ [ q 0 q_0 q0, q q q ] ] ];
由于 δ \delta δ ( ( ({ q 0 q_0 q0, q q q}, b b b ) ) )= δ \delta δ ( ( ( q 0 q_0 q0, b b b ) ) ) ⋃ \bigcup ⋃ δ \delta δ ( ( ( q q q, b b b ) ) )={ q q q} ⋃ \bigcup ⋃{ q 0 q_0 q0, q q q}={ q 0 q_0 q0, q q q},则有 δ D \delta_D δD ( ( ([ q 0 q_0 q0, q q q], b b b ) ) )= [ [ [ q 0 q_0 q0, q q q ] ] ]
因此,DFA M D M_D MD的状态转换图如图所示
有 ϵ \epsilon ϵ转换的不确定的有限自动机
前面定义的不确定的有限自动机,当有空串 ϵ \epsilon ϵ输入时,不能进行状态的转换
下面讨论一个不确定的有限自动机,可以使其具有空串 ϵ \epsilon ϵ转换的功能
和普通NFA的区别( δ \delta δ)
有 ϵ \epsilon ϵ转换的NFA和无 ϵ \epsilon ϵ转换的NFA区别在于转换函数 δ \delta δ的而不同,对有 ϵ \epsilon ϵ转换的NFA,其 δ \delta δ是从 Q Q Q × \times ×{ T T T ⋃ \bigcup ⋃{ ϵ \epsilon ϵ}}到 2 Q 2^Q 2Q的映射
ϵ \epsilon ϵ闭包
ϵ \epsilon ϵ闭包: P P P= ϵ \epsilon ϵ-closure ( ( ( q q q ) ) )
表示所有由状态 q q q出发,仅用 ϵ \epsilon ϵ便可到达的状态集合P
上图所示NFA,转换函数 δ \delta δ是
δ \delta δ ( ( ( q 0 q_0 q0, a a a ) ) )={ q 0 q_0 q0}, δ \delta δ ( ( ( q 0 q_0 q0, b b b ) ) )= ϕ \phi ϕ, δ \delta δ ( ( ( q 0 q_0 q0, c c c ) ) )= ϕ \phi ϕ, δ \delta δ ( ( ( q 0 q_0 q0, ϵ \epsilon ϵ ) ) )={ q 1 q_1 q1}
δ \delta δ ( ( ( q 1 q_1 q1, a a a ) ) )= ϕ \phi ϕ, δ \delta δ ( ( ( q 1 q_1 q1, b b b ) ) )={ q 1 q_1 q1}, δ \delta δ ( ( ( q 1 q_1 q1, c c c ) ) )= ϕ \phi ϕ, δ \delta δ ( ( ( q 1 q_1 q1, ϵ \epsilon ϵ ) ) )={ q 2 q_2 q2}
δ \delta δ ( ( ( q 2 q_2 q2, a a a ) ) )= ϕ \phi ϕ, δ \delta δ ( ( ( q 2 q_2 q2, b b b ) ) )= ϕ \phi ϕ, δ \delta δ ( ( ( q 2 q_2 q2, c c c ) ) )={ q 2 q_2 q2}, δ \delta δ ( ( ( q 2 q_2 q2, ϵ \epsilon ϵ ) ) )= ϕ \phi ϕ
三个状态的 ϵ \epsilon ϵ闭包分别为
ϵ \epsilon ϵ-closure ( ( ( q 0 q_0 q0 ) ) )={ q 0 q_0 q0, q 1 q_1 q1, q 2 q_2 q2}
ϵ \epsilon ϵ-closure ( ( ( q 1 q_1 q1 ) ) )={ q 1 q_1 q1, q 2 q_2 q2}
ϵ \epsilon ϵ-closure ( ( ( q 2 q_2 q2 ) ) )={ q 2 q_2 q2}
关于 δ ′ \delta' δ′的定义
定义
- δ ′ ( q , ϵ ) = ϵ − c l o s u r e ( q ) \delta'(q,\epsilon)=\epsilon-closure(q) δ′(q,ϵ)=ϵ−closure(q)
- 对于 ω \omega ω ∈ \in ∈ T ∗ T^* T∗, a a a ∈ \in ∈ T T T,有 δ ′ ( q , ω a ) = ϵ − c l o s u r e ( P ) \delta'(q,\omega{a})=\epsilon-closure(P) δ′(q,ωa)=ϵ−closure(P)其中, P P P={ p p p|对某些 r r r ∈ \in ∈ δ ′ \delta' δ′ ( ( ( q q q, ω \omega ω ) ) )且 p p p ∈ \in ∈ δ \delta δ ( ( ( r r r, a a a ) ) )},直观表现如图
- 对于状态集合 R R R,可扩展 δ \delta δ和 δ ′ \delta' δ′为 δ ( R , a ) = ⋃ q ∈ R δ ( q , a ) \delta(R,a)=\bigcup_{q\in{R}}\delta(q,a) δ(R,a)=q∈R⋃δ(q,a) δ ′ ( R , ω ) = ⋃ q ∈ R δ ′ ( q , ω ) \delta'(R,\omega)=\bigcup_{q\in{R}}\delta'(q,\omega) δ′(R,ω)=q∈R⋃δ′(q,ω)
在上述情况下, δ \delta δ和 δ ′ \delta' δ′的区别体现得更加直观
δ \delta δ ( ( ( q q q, a a a ) ) ) | δ ′ \delta' δ′ ( ( ( q q q, ω \omega ω ) ) ) | |
---|---|---|
第二个自变量 | 字符 a a a | 字符串 ω \omega ω |
表达含义 | 从 q q q出发,沿着标 a a a的边可到达的状态 | 从 q q q出发,沿着标 a a a或者标 ϵ \epsilon ϵ的边可到达的状态 |
因此 δ \delta δ ( ( ( q q q, a a a ) ) )不一定等于 δ ′ \delta' δ′ ( ( ( q q q, a a a ) ) ),同样 δ ′ \delta' δ′ ( ( ( q q q, ϵ \epsilon ϵ ) ) )也不一定等于 δ \delta δ ( ( ( q q q, ϵ \epsilon ϵ ) ) )
有 ϵ \epsilon ϵ转换NFA和无 ϵ \epsilon ϵ转换NFA的等效
定理
- 如果有 ϵ \epsilon ϵ转换NFA M M M接受语言 L L L ( ( ( M M M ) ) ),则存在无 ϵ \epsilon ϵ转换NFA M 1 M_1 M1使 L L L ( ( ( M 1 M_1 M1 ) ) )= L L L ( ( ( M M M ) ) )
转换方法
- 首先对应有 ϵ \epsilon ϵ转换的NFA M M M={ Q , T , δ , q 0 , F Q,T,\delta,q_0,F Q,T,δ,q0,F},构造无 ϵ \epsilon ϵ转换的NFA M 1 M_1 M1={ Q , T , δ 1 , q 0 , F 1 Q,T,\delta_1,q_0,F_1 Q,T,δ1,q0,F1}
- F 1 = { F ⋃ { q 0 } , 当 ϵ − c l o s u r e ( q 0 ) 含 F 的一个状态 F , 否则 F_1=\begin{cases} F\bigcup\{q_0\}, & \text {当$\epsilon-closure(q_0)$含$F$的一个状态} \\ F, & \text{否则} \end{cases} F1={F⋃{q0},F,当ϵ−closure(q0)含F的一个状态否则
- 定义 δ 1 \delta_1 δ1:对任意 q ∈ Q , a ∈ T q\in{Q},a\in{T} q∈Q,a∈T,则 δ 1 ( q , a ) = δ ′ ( q , a ) \delta_1(q,a)=\delta'(q,a) δ1(q,a)=δ′(q,a)
例 对于以下有 ϵ \epsilon ϵ转换的NFA M M M,找出其等效的无 ϵ \epsilon ϵ转换的NFA M 1 M_1 M1
Sol. 设 M = ( Q , T , δ , q 0 , F ) M=(Q,T,\delta,q_0,F) M=(Q,T,δ,q0,F),构造 M 1 = ( Q , T , δ 1 , q 0 , F 1 ) M_1=(Q,T,\delta_1,q_0,F_1) M1=(Q,T,δ1,q0,F1),则
F 1 F_1 F1:因为 ϵ \epsilon ϵ-closure ( ( ( q 0 q_0 q0 ) ) )={ q 0 q_0 q0, q 1 q_1 q1, q 2 q_2 q2},其中 q 2 q_2 q2 ∈ \in ∈ F F F,所以 F 1 F_1 F1={ q 0 q_0 q0, q 2 q_2 q2}
δ 1 \delta_1 δ1:因为 δ 1 \delta_1 δ1是由 δ ′ \delta' δ′定义,所以有 δ 1 ( q 0 , a ) = δ ′ ( q 0 , a ) = ϵ − c l o s u r e ( δ ( δ ′ ( q 0 , ϵ ) , a ) ) \delta_1(q_0,a)=\delta'(q_0,a)=\epsilon-closure(\delta(\delta'(q_0,\epsilon),a)) δ1(q0,a)=δ′(q0,a)=ϵ−closure(δ(δ′(q0,ϵ),a))={ q 0 q_0 q0, q 1 q_1 q1, q 2 q_2 q2}
δ 1 ( q 0 , b ) = δ ′ ( q 0 , b ) = ϵ − c l o s u r e ( δ ( δ ′ ( q 0 , ϵ ) , b ) ) \delta_1(q_0,b)=\delta'(q_0,b)=\epsilon-closure(\delta(\delta'(q_0,\epsilon),b)) δ1(q0,b)=δ′(q0,b)=ϵ−closure(δ(δ′(q0,ϵ),b))={ q 1 q_1 q1, q 2 q_2 q2}
δ 1 ( q 0 , c ) = δ ′ ( q 0 , c ) = ϵ − c l o s u r e ( δ ( δ ′ ( q 0 , ϵ ) , c ) ) \delta_1(q_0,c)=\delta'(q_0,c)=\epsilon-closure(\delta(\delta'(q_0,\epsilon),c)) δ1(q0,c)=δ′(q0,c)=ϵ−closure(δ(δ′(q0,ϵ),c))={ q 2 q_2 q2}
同样方法得 δ 1 \delta_1 δ1 ( ( ( q 1 q_1 q1, a a a ) ) )= ϕ \phi ϕ, δ 1 \delta_1 δ1 ( ( ( q 1 q_1 q1, b b b ) ) )={ q 1 q_1 q1, q 2 q_2 q2}, δ 1 \delta_1 δ1 ( ( ( q 1 q_1 q1, c c c ) ) )={ q 2 q_2 q2}
δ 1 \delta_1 δ1 ( ( ( q 2 q_2 q2, a a a ) ) )= ϕ \phi ϕ, δ 1 \delta_1 δ1 ( ( ( q 2 q_2 q2, b b b ) ) )= ϕ \phi ϕ, δ 1 \delta_1 δ1 ( ( ( q 2 q_2 q2, c c c ) ) )={ q 2 q_2 q2}
无 ϵ \epsilon ϵ转换的NFA M 1 M_1 M1 状态转移图如下
正则集与正则式
正则式(Regular Expression)
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑
正则表达式用类似代数表达式的方法来描述语言,它的值是一个语言
定义
字母表T上的一个正则式和它表示的正则集,可递归定义如下
- ϵ \epsilon ϵ和 ϕ \phi ϕ都是正则式,分别表示的正则集是{ ϵ \epsilon ϵ}和空集 ϕ \phi ϕ
- 任意 a a a ∈ \in ∈ T T T是正则式,他表示的正则集是{ a a a}
- 如果 A A A和 B B B是正则式,分别表示的正则集是 L L L ( ( ( A A A ) ) )和 L L L ( ( ( B B B ) ) ),则 ( ( ( A A A + + + B B B ) ) )、 ( ( ( A A A ⋅ \cdot ⋅ B B B ) ) )、 ( ( ( A ∗ A^* A∗ ) ) )也都是正则式,分别表示的正则集是 L ( A ) ⋃ L ( B ) L(A)\bigcup{L(B)} L(A)⋃L(B)、 L ( A ) L ( B ) L(A)L(B) L(A)L(B)、 L ( A ) ∗ L(A)^* L(A)∗
仅由有限次使用以上三步所定义的表达式,才是字母表 T T T正则式,且这些正则式表示的字符串集合才是 T T T上的正则集
例如
正则式 | 正则集 |
---|---|
( a + b ) ∗ (a+b)^* (a+b)∗ | T T T上所有 a a a和 b b b组成的字符串集合 |
a b ∗ ab^* ab∗ | T T T上所有以 a a a为首后跟任意个 b b b的字符串集合 |
b ( a + b ) ∗ b(a+b)^* b(a+b)∗ | T T T上所有以 b b b为首后跟由 a a a和 b b b组成的字符串集合 |
( a + b ) ∗ ( a a + b b ) ( a + b ) ∗ (a+b)^*(aa+bb)(a+b)^* (a+b)∗(aa+bb)(a+b)∗ | T T T上所有含有两个连续 a a a或两个连续 b b b的字符串集合 |
性质
设 α \alpha α, β \beta β, γ \gamma γ都是正则式,则
- ( α + β ) + γ = α + ( β + γ ) (\alpha+\beta)+\gamma=\alpha+(\beta+\gamma) (α+β)+γ=α+(β+γ)
- ( α ⋅ β ) ⋅ γ = α ⋅ ( β ⋅ γ ) (\alpha\cdot\beta)\cdot\gamma=\alpha\cdot(\beta\cdot\gamma) (α⋅β)⋅γ=α⋅(β⋅γ)
- α + β = β + α \alpha+\beta=\beta+\alpha α+β=β+α
- α + α = α \alpha+\alpha=\alpha α+α=α
- α ⋅ ( β + γ ) = ( α ⋅ β ) + ( α ⋅ γ ) \alpha\cdot(\beta+\gamma)=(\alpha\cdot\beta)+(\alpha\cdot\gamma) α⋅(β+γ)=(α⋅β)+(α⋅γ)
- ( β + γ ) ⋅ α = ( β ⋅ α ) + ( γ ⋅ α ) (\beta+\gamma)\cdot\alpha=(\beta\cdot\alpha)+(\gamma\cdot\alpha) (β+γ)⋅α=(β⋅α)+(γ⋅α)
- α + ϕ = α \alpha+\phi=\alpha α+ϕ=α
- α ⋅ ϕ = ϕ ⋅ α = ϕ \alpha\cdot\phi=\phi\cdot\alpha=\phi α⋅ϕ=ϕ⋅α=ϕ
- α ⋅ ϵ = ϵ ⋅ α = α \alpha\cdot\epsilon=\epsilon\cdot\alpha=\alpha α⋅ϵ=ϵ⋅α=α
- ( α ∗ ) ∗ = α ∗ (\alpha^*)^*=\alpha^* (α∗)∗=α∗
- α ∗ = ϵ + α + \alpha^*=\epsilon+\alpha^+ α∗=ϵ+α+
正则文法(3型文法) ⇒ \Rightarrow ⇒正则式
步骤:
- 根据文法的生成式写出联立方程
- 利用规则R和正则式的性质求解联立方程
规则R:
设 x = α x + β , α ∈ T ∗ , β ∈ ( N ⋃ T ) ∗ , x ∈ N x=\alpha{x}+\beta,\alpha\in{T^*},\beta\in(N\bigcup{T})^*,x\in{N} x=αx+β,α∈T∗,β∈(N⋃T)∗,x∈N,其解为 x = α ∗ β x=\alpha^*\beta x=α∗β
例 设右线性文法 G G G= ( ( ({ S , A , B S,A,B S,A,B},{ a , b a,b a,b}, P P P, S S S ) ) ),生成式 P P P如下:
S → a A , S → b B , S → b S\rightarrow{aA},S\rightarrow{bB},S\rightarrow{b} S→aA,S→bB,S→b A → b A , A → ϵ A\rightarrow{bA},A\rightarrow{\epsilon} A→bA,A→ϵ B → b S B\rightarrow{bS} B→bS
Sol. 以上生成式写成联立方程为 S = a A + b B + b S=aA+bB+b S=aA+bB+b A = b A + ϵ A=bA+\epsilon A=bA+ϵ B = b S B=bS B=bS
通过正则式性质与规则R,可得 S = ( b b ) ∗ ( a b ∗ + b ) S=(bb)^*(ab^*+b) S=(bb)∗(ab∗+b)
由G产生的语言,用正则式表示为 S = ( b b ) ∗ ( a b ∗ + b ) S=(bb)^*(ab^*+b) S=(bb)∗(ab∗+b)
正则式 ⇒ \Rightarrow ⇒正则文法(3型文法)
正则集是由3型文法(正则文法)所产生的语言
可以通过证明正则集 ϕ \phi ϕ、{ ϵ \epsilon ϵ}、{ a a a}为右线性语言
再证明 L 1 ⋃ L 2 L_1\bigcup{L_2} L1⋃L2、 L 1 L 2 L_1L_2 L1L2、 L 1 ∗ L1^* L1∗为右线性语言
这样就得到了正则式 ⇒ \Rightarrow ⇒正则文法
综合上一小节,可得 正 则 式 ⟺ 正 则 文 法 正则式\Longleftrightarrow正则文法 正则式⟺正则文法 正 则 集 ⟺ 右 线 性 语 言 正则集\Longleftrightarrow右线性语言 正则集⟺右线性语言定理 一 个 语 言 是 正 则 集 , 当 且 仅 当 该 语 言 为 右 线 性 语 言 一个语言是正则集,当且仅当该语言为右线性语言 一个语言是正则集,当且仅当该语言为右线性语言
正则表达式和有限自动机
扩充正则式
扩充正则式与它表示的正则集,递归定义如下:
如果 R R R为正则式,则 R R R即为扩充正则式;
如果 R R R为扩充正则式,则
- R + R^+ R+为扩充正则式,且表示为 R R ∗ RR^* RR∗;
- R + k R^{+k} R+k为扩充正则式,且表示为 R ⋃ R R ⋃ R R R . . . ⋃ R k R\bigcup{RR}\bigcup{RRR}...\bigcup{R^k} R⋃RR⋃RRR...⋃Rk;
- R ∗ k R^{*k} R∗k为扩充正则式,且表示为 { ϵ } ⋃ R ⋃ R R ⋃ R R R . . . ⋃ R k \{\epsilon\}\bigcup{R}\bigcup{RR}\bigcup{RRR}...\bigcup{R^k} {ϵ}⋃R⋃RR⋃RRR...⋃Rk;如果 R 1 R_1 R1, R 2 R_2 R2为扩充正则式,则 R 1 R 2 R_1R_2 R1R2和 R 1 + R 2 R_1+R_2 R1+R2为扩充正则式
除1、2、3外无其他的扩充正则式
已知正则表达式求有限自动机
定理 设 L 是 正 则 表 达 式 R 表 示 的 语 言 , 则 存 在 一 个 具 有 ϵ 转 换 的 有 限 自 动 机 接 受 语 言 L 设L是正则表达式R表示的语言,则存在一个具有\epsilon转换的有限自动机接受语言L 设L是正则表达式R表示的语言,则存在一个具有ϵ转换的有限自动机接受语言L
由正则式到确定的有限自动机变换过程: 正 则 式 → N F A → 等 效 的 D F A → 状 态 最 少 的 、 最 简 的 D F A 正则式\rightarrow{NFA}\rightarrow等效的DFA\rightarrow状态最少的、最简的DFA 正则式→NFA→等效的DFA→状态最少的、最简的DFA
给定::在字母表 T T T上的正则式 R R R
要求:构造有 ϵ \epsilon ϵ转换的不确定的有限自动机。该具有 ϵ \epsilon ϵ转换的有限自动机满足如下条件:
1.恰好一个终态;2.没有弧进入初态;3.没有弧里离开终态
方法:
1.当 R = ϵ , R = ϕ 和 R = a , a ∈ T R=\epsilon,R=\phi和R=a,a\in{T} R=ϵ,R=ϕ和R=a,a∈T时,对应的NFA如下
2.当 R = R 1 + R 2 R=R_1+R_2 R=R1+R2时, R 1 R_1 R1和 R 2 R_2 R2分别对应NFA M 1 M_1 M1和NFA M 2 M_2 M2, R R R对应 M M M
设 M 1 = ( Q 1 , T 1 , δ 1 , q 1 , { q f 1 } ) M_1=(Q_1,T_1,\delta_1,q_1,\{q_{f1}\}) M1=(Q1,T1,δ1,q1,{qf1}), M 2 = ( Q 2 , T 2 , δ 2 , q 2 , { q f 2 } ) M_2=(Q_2,T_2,\delta_2,q_2,\{q_{f2}\}) M2=(Q2,T2,δ2,q2,{qf2})且 Q 1 ⋂ Q 2 = ϕ Q_1\bigcap{Q_2}=\phi Q1⋂Q2=ϕ
构造 M = ( Q 1 ⋃ Q 2 ⋃ { q 0 , q f } , T 1 ⋃ T 2 , δ , q 0 , { q f } ) M=(Q_1\bigcup{Q_2}\bigcup\{q_0,q_f\},T_1\bigcup{T_2},\delta,q_0,\{q_f\}) M=(Q1⋃Q2⋃{q0,qf},T1⋃T2,δ,q0,{qf}),其中 δ \delta δ定义如下:
- δ ( q 0 , ϵ ) = { q 1 , q 2 } \delta(q_0,\epsilon)=\{q_1,q_2\} δ(q0,ϵ)={q1,q2}
- 对于 q ∈ Q 1 − { q f 1 } , a ∈ T 1 ⋃ { ϵ } q\in{Q_1}-\{q_{f1}\},a\in{T_1}\bigcup\{\epsilon\} q∈Q1−{qf1},a∈T1⋃{ϵ},有 δ ( q , a ) = δ 1 ( q , a ) \delta(q,a)=\delta_1(q,a) δ(q,a)=δ1(q,a)
- 对于 q ∈ Q 2 − { q f 2 } , a ∈ T 2 ⋃ { ϵ } q\in{Q_2}-\{q_{f2}\},a\in{T_2}\bigcup\{\epsilon\} q∈Q2−{qf2},a∈T2⋃{ϵ},有 δ ( q , a ) = δ 2 ( q , a ) \delta(q,a)=\delta_2(q,a) δ(q,a)=δ2(q,a)
- δ ( q f 1 , ϵ ) = δ ( q 2 , ϵ ) = { q f } \delta(q_{f1},\epsilon)=\delta(q_2,\epsilon)=\{q_f\} δ(qf1,ϵ)=δ(q2,ϵ)={qf}
构造图如下
3.当 R = R 1 R 2 R=R_1R_2 R=R1R2时,设 M 1 = ( Q 1 , T 1 , δ 1 , q 1 , { q f 1 } ) M_1=(Q_1,T_1,\delta_1,q_1,\{q_{f1}\}) M1=(Q1,T1,δ1,q1,{qf1}), M 2 = ( Q 2 , T 2 , δ 2 , q 2 , { q f 2 } ) M_2=(Q_2,T_2,\delta_2,q_2,\{q_{f2}\}) M2=(Q2,T2,δ2,q2,{qf2})且 Q 1 ⋂ Q 2 = ϕ Q_1\bigcap{Q_2}=\phi Q1⋂Q2=ϕ
R R R对应 M M M,构造 M = ( Q 1 ⋃ Q 2 , T 1 ⋃ T 2 , δ , { q 1 } , { q f 2 } ) M=(Q_1\bigcup{Q_2},T_1\bigcup{T_2},\delta,\{q_1\},\{q_{f2}\}) M=(Q1⋃Q2,T1⋃T2,δ,{q1},{qf2}),其中 δ \delta δ定义如下: - 对于 q ∈ Q 1 − { q f 1 } , a ∈ T 1 ⋃ { ϵ } q\in{Q_1}-\{q_{f1}\},a\in{T_1}\bigcup\{\epsilon\} q∈Q1−{qf1},a∈T1⋃{ϵ},有 δ ( q , a ) = δ 1 ( q , a ) \delta(q,a)=\delta_1(q,a) δ(q,a)=δ1(q,a)
- δ ( q f 1 , ϵ ) = { q 2 } \delta(q_{f1},\epsilon)=\{q_2\} δ(qf1,ϵ)={q2}
- 对于 q ∈ Q 2 , a ∈ T 2 ⋃ { ϵ } q\in{Q_2},a\in{T_2}\bigcup\{\epsilon\} q∈Q2,a∈T2⋃{ϵ},有 δ ( q , a ) = δ 2 ( q , a ) \delta(q,a)=\delta_2(q,a) δ(q,a)=δ2(q,a)
构造图如下
4.当 R = R 1 ∗ R=R_1^* R=R1∗时,设 M 1 = ( Q 1 , T 1 , δ 1 , q 1 , { q f 1 } ) M_1=(Q_1,T_1,\delta_1,q_1,\{q_{f1}\}) M1=(Q1,T1,δ1,q1,{qf1}),构造 M = ( Q 1 ⋃ { q 0 , q f } , T 1 , δ , q 0 , { q f } ) M=(Q_1\bigcup\{q_0,q_f\},T_1,\delta,q_0,\{q_f\}) M=(Q1⋃{q0,qf},T1,δ,q0,{qf}),其中 δ \delta δ定义如下: - δ ( q 0 , ϵ ) = δ ( q f 1 , ϵ ) = { q 1 , q f } \delta(q_0,\epsilon)=\delta(q_{f1},\epsilon)=\{q_1,q_f\} δ(q0,ϵ)=δ(qf1,ϵ)={q1,qf};
- 对于 q ∈ Q 1 − { q f 1 } , a ∈ T 1 ⋃ { ϵ } q\in{Q_1}-\{q_{f1}\},a\in{T_1}\bigcup\{\epsilon\} q∈Q1−{qf1},a∈T1⋃{ϵ},有 δ ( q , a ) = δ 1 ( q , a ) \delta(q,a)=\delta_1(q,a) δ(q,a)=δ1(q,a)
构造图如下
已知确定的有限自动机求正则表达式
定理 设 L 是 被 确 定 的 有 限 自 动 机 接 受 的 语 言 , 则 L 可 用 一 个 正 则 表 达 式 表 示 设L是被确定的有限自动机接受的语言,则L可用一个正则表达式表示 设L是被确定的有限自动机接受的语言,则L可用一个正则表达式表示
方法:状态消去法
思路:
10. 扩展自动机的概念,允许正则表达式作为转移弧的标记(消去某一中间状态时,保证自动机能够接受的字符串集合保持不变)
11. 在消去某一中间状态时,与其相关的转移弧也将同时消去,所造成的影响将通过修改从每一个前趋状态到每一个后继状态的转移弧标记来弥补
例如
正则表达式的构造步骤:
12. 对每一终结状态 q q q,依次消去除 q q q和初态 q 0 q_0 q0之外的其他状态;
13. 若KaTeX parse error: Undefined control sequence: \neqq at position 2: q\̲n̲e̲q̲q̲_0,最终可得到一般形式的状态自动机,该自动机对应的正则表达式可表示为 ( R ∗ + S U ∗ T ) ∗ S U ∗ (R^*+SU^*T)^*SU^* (R∗+SU∗T)∗SU∗
14. 若 q = q 0 q=q_0 q=q0,最终可得到如下图所示的自动机,它对应的正则表达式可以表示为 R ∗ R^* R∗
最终的正则表达式为每一终结状态对应的正则表达式之和
右线性语言与有限自动机
讨论右线性文法产生的语言与有限自动机所接受的语言之间的关系
右线性文法 ⇒ \Rightarrow ⇒有限自动机
定理 设 右 线 性 文 法 G = { N , T , P , S } , 产 生 的 语 言 为 L ( G ) , 则 存 在 一 个 有 限 自 动 机 M 接 受 的 语 言 L ( M ) = L ( G ) 设右线性文法G=\{N,T,P,S\},产生的语言为L(G),则存在一个有限自动机M接受的语言L(M)=L(G) 设右线性文法G={N,T,P,S},产生的语言为L(G),则存在一个有限自动机M接受的语言L(M)=L(G)
例 设右线性文法 G = ( N , T , P , S ) , 其 中 G=(N,T,P,S),其中 G=(N,T,P,S),其中 N = { S , B } N=\{S,B\} N={S,B} T = { a , b } T=\{a,b\} T={a,b}生成式 P P P如下 S → a B , B → a B S\rightarrow{aB},B\rightarrow{aB} S→aB,B→aB B → b S , B → a B\rightarrow{bS},B\rightarrow{a} B→bS,B→a构造NFA M = { Q , T , δ , q 0 , F } , 其 中 M=\{Q,T,\delta,q_0,F\},其中 M={Q,T,δ,q0,F},其中 Q = { S , A , B } Q=\{S,A,B\} Q={S,A,B} F = { A } F=\{A\} F={A} q 0 = S q_0=S q0=S δ \delta δ定义如下:
当 S → a B ∈ P , 则 有 δ ( S , a ) = { B } S\rightarrow{aB}\in{P},则有\delta(S,a)=\{B\} S→aB∈P,则有δ(S,a)={B};
当 B → a B , B → a ∈ P , 则 有 δ ( B , a ) = { A , B } B\rightarrow{aB},B\rightarrow{a}\in{P},则有\delta(B,a)=\{A,B\} B→aB,B→a∈P,则有δ(B,a)={A,B};
当 B → b S ∈ P , 则 有 δ ( B , b ) = { S } B\rightarrow{bS}\in{P},则有\delta(B,b)=\{S\} B→bS∈P,则有δ(B,b)={S}
且 δ ( A , a ) = δ ( A , b ) = ϕ \delta(A,a)=\delta(A,b)=\phi δ(A,a)=δ(A,b)=ϕ
NFA状态转换图如下
有限自动机 ⇒ \Rightarrow ⇒右线性文法
定理 设 有 限 自 动 机 M 接 受 的 语 言 为 L ( M ) , 则 存 在 右 线 性 文 法 G , 它 产 生 的 语 言 L ( G ) = L ( M ) 设有限自动机M接受的语言为L(M),则存在右线性文法G,它产生的语言L(G)=L(M) 设有限自动机M接受的语言为L(M),则存在右线性文法G,它产生的语言L(G)=L(M)
例 设DFA M = { Q , T , δ , q 0 , F } M=\{Q,T,\delta,q_0,F\} M={Q,T,δ,q0,F},其中 Q = { q 0 , q 1 , q 2 , q 3 } Q=\{q_0,q_1,q_2,q_3\} Q={q0,q1,q2,q3} T = { a , b } T=\{a,b\} T={a,b} F = { q 3 } F=\{q_3\} F={q3} δ \delta δ定义如下: δ ( q 0 , a ) = q 1 , δ ( q 0 , b ) = q 2 \delta(q_0,a)=q_1,\delta(q_0,b)=q_2 δ(q0,a)=q1,δ(q0,b)=q2 δ ( q 1 , a ) = q 3 , δ ( q 1 , b ) = q 1 \delta(q_1,a)=q_3,\delta(q_1,b)=q_1 δ(q1,a)=q3,δ(q1,b)=q1 δ ( q 2 , a ) = q 2 , δ ( q 2 , b ) = q 3 \delta(q_2,a)=q_2,\delta(q_2,b)=q_3 δ(q2,a)=q2,δ(q2,b)=q3 δ ( q 3 , a ) = ϕ , δ ( q 3 , b ) = q 1 \delta(q_3,a)=\phi,\delta(q_3,b)=q_1 δ(q3,a)=ϕ,δ(q3,b)=q1转换图如下
构造右线性文法 G = N , T , P , S G={N,T,P,S} G=N,T,P,S,其中 N = { q 0 , q 1 , q 2 , q 3 } N=\{q_0,q_1,q_2,q_3\} N={q0,q1,q2,q3} S = q 0 S=q_0 S=q0生成式 P P P如下:
因为 δ ( q 0 , a ) = q 1 , 则 有 q 0 → a q 1 ∈ P \delta(q_0,a)=q_1,则有q_0\rightarrow{aq_1}\in{P} δ(q0,a)=q1,则有q0→aq1∈P
因为 δ ( q 0 , b ) = q 2 , 则 有 q 0 → b q 2 ∈ P \delta(q_0,b)=q_2,则有q_0\rightarrow{bq_2}\in{P} δ(q0,b)=q2,则有q0→bq2∈P
因为 δ ( q 1 , a ) = q 3 且 q 3 ∈ F , 则 有 q 1 → a ∈ P , q 1 → a q 3 ∈ P \delta(q_1,a)=q_3且q_3\in{F},则有q_1\rightarrow{a}\in{P},q_1\rightarrow{aq_3}\in{P} δ(q1,a)=q3且q3∈F,则有q1→a∈P,q1→aq3∈P
因为 δ ( q 1 , b ) = q 1 , 则 有 q 1 → b q 1 ∈ P \delta(q_1,b)=q_1,则有q_1\rightarrow{bq_1}\in{P} δ(q1,b)=q1,则有q1→bq1∈P
因为 δ ( q 2 , a ) = q 2 , 则 有 q 2 → a q 2 ∈ P \delta(q_2,a)=q_2,则有q_2\rightarrow{aq_2}\in{P} δ(q2,a)=q2,则有q2→aq2∈P
因为 δ ( q 2 , b ) = q 3 且 q 3 ∈ F , 则 有 q 2 → b ∈ P , q 2 → b q 3 ∈ P \delta(q_2,b)=q_3且q_3\in{F},则有q_2\rightarrow{b}\in{P},q_2\rightarrow{bq_3}\in{P} δ(q2,b)=q3且q3∈F,则有q2→b∈P,q2→bq3∈P
因为 δ ( q 3 , b ) = q 1 , 则 有 q 3 → b q 1 ∈ P \delta(q_3,b)=q_1,则有q_3\rightarrow{bq_1}\in{P} δ(q3,b)=q1,则有q3→bq1∈P
再将文法 G G G的生成式,写成联立方程式为 q 0 = a q 1 + b q 2 q_0=aq_1+bq_2 q0=aq1+bq2 q 1 = b q 1 + a q 3 + a q_1=bq_1+aq_3+a q1=bq1+aq3+a q 2 = a q 2 + b q 3 + b q_2=aq_2+bq_3+b q2=aq2+bq3+b q 3 = b q 1 q_3=bq_1 q3=bq1求解联立方程,得正则式为 q 1 = ( b + a b ) ∗ a q_1=(b+ab)^*a q1=(b+ab)∗a q 2 = a ∗ b b ( b + a b ) ∗ a + a ∗ b q_2=a^*bb(b+ab)^*a+a^*b q2=a∗bb(b+ab)∗a+a∗b最后有 q 0 = a ( b + a b ) ∗ a + b ( a ∗ b b ( b + a b ) ∗ a + a ∗ b ) q_0=a(b+ab)^*a+b(a^*bb(b+ab)^*a+a^*b) q0=a(b+ab)∗a+b(a∗bb(b+ab)∗a+a∗b)其中 q 0 = S q_0=S q0=S表示DFA M M M接受的语言和文法 G G G产生的语言是相同的
正则文法、有限自动机和正则表达式的关系
至此已证明了正则文法、有限自动机和正则表达式是3个等价的计算模型。
此外,右线性文法与左线性文法也是等价的。因此,下述命题是等价的:
- 语言 L L L由右线性文法生成
- 语言 L L L由左线性文法生成
- 语言 L L L被DFA接受
- 语言 L L L被NFA接受
- 语言 L L L可以用正则表达式表示
正 则 文 法 ⟺ 有 限 自 动 机 ⟺ 正 则 表 达 式 正则文法\Longleftrightarrow {有限自动机}\Longleftrightarrow正则表达式 正则文法⟺有限自动机⟺正则表达式
右线性语言的性质
右线性语言的性质有:有限自动机的化简,泵浦引理和右线性语言对并、交、连接、闭包等运算的封闭性
确定的有限自动机的化简
确定的有限自动机 M M M的化简是找出一个状态数比 M M M少的DFA M 1 M_1 M1,满足 L ( M ) = L ( M 1 ) L(M)=L(M_1) L(M)=L(M1),通常称为确定的有限自动机的最小化
定义设有限自动机 M = { Q , T , δ , q 0 , F } M=\{Q,T,\delta,q_0,F\} M={Q,T,δ,q0,F},对不同的状态 q 1 , q 2 ∈ Q q_1,q_2\in{Q} q1,q2∈Q,和每个 ω ∈ T ∗ \omega\in{T^*} ω∈T∗,如果有 ( q 1 , ω ) ├ ( q , ϵ ) (q_1,\omega)├(q,\epsilon) (q1,ω)├(q,ϵ)和 ( q 2 , ω ) ├ ( q , ϵ ) (q_2,\omega)├(q,\epsilon) (q2,ω)├(q,ϵ)且 q ∈ F q\in{F} q∈F,则称q_1和q_2是等价的,记为 q 1 ≡ q 2 q_1\equiv{q_2} q1≡q2
如果 q 1 q_1 q1和 q 2 q_2 q2不是等价的,则称 q 1 q_1 q1和 q 2 q_2 q2是可区分的
如果不存在任何 ω ∈ T ∗ \omega\in{T^*} ω∈T∗,使 ( q 0 , ω ) ├ ( q , ϵ ) (q_0,\omega)├(q,\epsilon) (q0,ω)├(q,ϵ)称状态 q ∈ Q q\in{Q} q∈Q是不可达状态
由定义可知,如果有限自动机 M M M不存在不可达状态和没有互为等价状态,则这个有限自动机便是最小化的,或者说是经过化简的。
化简方法:逐步划分
例 化简下图所示的DFA M M M
q 7 q_7 q7和 q 8 q_8 q8是不可达状态,可以删除,余下的状态划分为终止状态集合 π 1 \pi^1 π1和非终止状态集合 π 2 \pi^2 π2,而 π 1 = { q 3 , q 4 , q 5 , q 6 } \pi^1=\{q_3,q_4,q_5,q_6\} π1={q3,q4,q5,q6} π 2 = { q 0 , q 1 , q 2 } \pi^2=\{q_0,q_1,q_2\} π2={q0,q1,q2}则有划分 Π = { π 1 , π 2 } \Pi=\{\pi^1,\pi^2\} Π={π1,π2}对 π 1 \pi^1 π1经标 a a a的边可达集合是 { q 3 , q 6 } \{q_3,q_6\} {q3,q6},经 b b b的边可达集合是 { q 4 , q 5 } \{q_4,q_5\} {q4,q5},可得 { q 3 , q 6 } ⊂ π 1 \{q_3,q_6\}\subset\pi^1 {q3,q6}⊂π1, { q 4 , q 5 } ⊂ π 1 \{q_4,q_5\}\subset\pi^1 {q4,q5}⊂π1,因此 π 1 \pi^1 π1不能再细分
π 2 \pi^2 π2经标 a a a的边可达集合是 { q 1 , q 3 } \{q_1,q_3\} {q1,q3},由于 q 1 , q 3 q_1,q_3 q1,q3分别属于 π 1 \pi^1 π1和 π 2 \pi^2 π2,故将 π 2 \pi^2 π2细分为 π 21 = { q 0 , q 2 } \pi^{21}=\{q_0,q_2\} π21={q0,q2}和 π 22 = { q 1 } \pi^{22}=\{q_1\} π22={q1}
又因 π 21 = { q 0 , q 2 } \pi^{21}=\{q_0,q_2\} π21={q0,q2}经标 b b b的边,可达集合是 { q 2 , q 4 } \{q_2,q_4\} {q2,q4},分别属于 π 21 \pi^{21} π21和 π 1 \pi^1 π1,再将 π 21 \pi^{21} π21细分为 { q 0 } , { q 2 } \{q_0\},\{q_2\} {q0},{q2}
最后得划分 Π ′ = { { q 0 } , { q 1 } , { q 2 } , { q 3 , q 4 , q 5 , q 6 } } \Pi'=\{\{q_0\},\{q_1\},\{q_2\},\{q_3,q_4,q_5,q_6\}\} Π′={{q0},{q1},{q2},{q3,q4,q5,q6}}用 q 3 q_3 q3代替 { q 3 , q 4 , q 5 , q 6 } \{q_3,q_4,q_5,q_6\} {q3,q4,q5,q6},可得简化后的 M 1 M_1 M1,如图所示
计算状态集划分的算法——填表法
通过计算等价类可以找到自动机的最少状态(给不等价状态对做标记)
递归标记可区分的状态对:
- 基础:如果 p p p为终结状态,而 q q q为非中介状态,则 p p p和 q q q标记为可区分的
- 归纳:设 p p p和 q q q已标记为可区分的,如果状态 r r r和 s s s通过某个输入符号 a a a可分别转移到 p p p和 q q q,即 δ ( r , a ) = p , δ ( s , a ) = q \delta(r,a)=p,\delta(s,a)=q δ(r,a)=p,δ(s,a)=q,则 r r r和 s s s也标记为可区分的
例 用填表法化简确定的有限自动机
Sol.
可知 a ≡ e , b ≡ h , d ≡ f a\equiv{e},b\equiv{h},d\equiv{f} a≡e,b≡h,d≡f,化简后的最少状态有限自动机如下
泵浦引理
泵浦引理给出了正则集的一个重要性质,利用它可以证明某个语言不是正则集
泵浦引理表明,当给出一个正则集和该机和上一个足够长的字符串时,在该字符串中能找到一个非空的子串,并使字串重复,从而组成新的字符串,也必在同一个正则集内。
定理 设 L 是 正 则 集 , 存 在 常 数 k , 对 字 符 串 ω ∈ L 且 ∣ ω ∣ ≥ k , 则 ω 可 写 成 ω 1 ω 0 ω 2 , 其 中 0 < ∣ ω 0 ∣ , ∣ ω 1 ω 0 ∣ ≤ k , 并 对 所 有 i ≥ 0 有 ω 1 ω 0 i ω 2 ∈ L 设L是正则集,存在常数k,对字符串\omega\in{L}且|\omega|\geq{k},则\omega可写成\omega_1\omega_0\omega_2,其中0<|\omega_0|,|\omega_1\omega_0|\leq{k},并对所有i\geq{0}有\omega_1\omega_0^i\omega_2\in{L} 设L是正则集,存在常数k,对字符串ω∈L且∣ω∣≥k,则ω可写成ω1ω0ω2,其中0<∣ω0∣,∣ω1ω0∣≤k,并对所有i≥0有ω1ω0iω2∈L
例 证明集合 L = { a n b n ∣ n ≥ 1 } L=\{a^nb^n|n\geq{1}\} L={anbn∣n≥1}不是正则集
Sol.
假设 L L L是正则集,对足够大的 n n n,则 a n b n a^nb^n anbn可写成 ω 1 ω 0 ω 2 \omega_1\omega_0\omega_2 ω1ω0ω2,其中 0 < ∣ ω 0 ∣ , ∣ ω 1 ω 0 ∣ ≤ n , ∣ ω ∣ = 2 n > n 0<|\omega_0|,|\omega_1\omega_0|\leq{n},|\omega|=2n>n 0<∣ω0∣,∣ω1ω0∣≤n,∣ω∣=2n>n, ω 0 \omega_0 ω0只能取 a + a^+ a+,设 ∣ ω 0 ∣ = k ≥ 1 |\omega_0|=k\geq{1} ∣ω0∣=k≥1,取 i = 0 i=0 i=0,有 ω 1 ω 0 0 ω 2 = ω 1 ω 2 = a n − k b n \omega_1\omega_0^0\omega_2=\omega_1\omega_2=a^{n-k}b^n ω1ω00ω2=ω1ω2=an−kbn,此时新组成的串 ω 1 ω 2 ∉ L \omega_1\omega_2\notin{L} ω1ω2∈/L,与假设矛盾,所以 L L L不是正则集
右线性语言的封闭性
- L 1 ⋃ L 2 L_1\bigcup{L_2} L1⋃L2为右线性语言
- L 1 L 2 L_1{L_2} L1L2为右线性语言
- L ∗ L^* L∗为右线性语言
- ~ L L L为右线性语言
- L 1 ⋂ L 2 L_1\bigcap{L_2} L1⋂L2是右线性语言
- 右线性语言对置换封闭
双向和有输出的有限自动机
双向有限自动机
确定的双向有限自动机 M M M的形式定义(2DFA) M = ( Q , T , δ , q 0 , F ) M=(Q,T,\delta,q_0,F) M=(Q,T,δ,q0,F)2DFA的 δ \delta δ,是从 Q × T Q\times{T} Q×T到 Q × { L , R } Q\times\{L,R\} Q×{L,R}的映射 Q × T → Q × { L , R } Q\times{T}\rightarrow{Q\times\{L,R\}} Q×T→Q×{L,R}L,R代表读入前面的字符后读头左移或右移
有输出的有限自动机
有输出的有限自动机可以分为米兰机和摩尔机
米兰机定义
设有限自动机 M M M为六元组, M = ( Q , T , R , δ , g , q 0 ) M=(Q,T,R,\delta,g,q_0) M=(Q,T,R,δ,g,q0)
Q Q Q是有限状态集合
T T T是有限输入字母表
R R R是有限输出字母表
δ \delta δ是转换函数,是从 Q × T Q\times{T} Q×T到 Q Q Q的映射
g g g是转换函数,是从 Q × T Q\times{T} Q×T到 R R R的映射
q 0 q_0 q0是初始状态, q 0 ∈ Q q_0\in{Q} q0∈Q
摩尔机定义
设有限自动机 M M M为六元组, M = ( Q , T , R , δ , g , q 0 ) M=(Q,T,R,\delta,g,q_0) M=(Q,T,R,δ,g,q0)
只有输出函数 g g g与米兰及不同, g g g是从 Q Q Q到 R R R的映射,表明了摩尔机的输出只与到达的状态有关
有限自动机和右线性文法笔记相关推荐
- 【第三章 有限自动机与右线性文法】形式语言与自动机第三章个人总结复习笔记分享!(含文件、持续更新...)
目录 前言 一.总览 二.章节展示 3.1 [有限自动机] 3.2 [不确定的有限自动机] 3.3 [DFA和NFA的等效] 3.4 [有ε转换的不确定的有限自动机] 3.5 [正则集与正则式] 3. ...
- 形式语言与自动机 Part.1绪论, Part.2 语言与文法
课程名:形式语言与自动机 作者:Lupinus_Linn 许可证:CC-BY-NC-SA 3.0 创作共用-署名-非商业性-相同方式共享 署名(英语:Attribution,BY):您(用户)可以复制 ...
- 计算机考博方向数学,2016华中科技大学考博:计算机数学考试大纲
2016华中科技大学考博:计算机数学考试大纲 研究生院发布的考博大纲是考生们参考复习的权威资料,考试大纲包括了考试内容范围.考试题型和分值分配,有时其中还会包括参考书目.请考生们认真阅读. <计 ...
- Formal Languages and Compilers 笔记教程 第一章 有限自动机与正则语言 (Finite Automata and Regular Languages)
Formal Languages and Compilers (形式语言和编译器) 的 自学笔记兼学习教程. 笔记作者介绍:大爽歌, b站小UP主 ,编程1对1辅导老师. 1 Finite Autom ...
- bilibili深入理解计算机系统笔记(2):第一次代码重构,汇编模拟器,递归,指令周期实现。
文章目录 深入理解计算机系统笔记(2) 第一次代码重构 可变参数输出print函数 bitmap学习 P10 有限自动机 指令周期 递归求和函数c语言和汇编语言 回调函数的实现 call和ret指令的 ...
- java 正则表达式 替换字符串img标签的路径_正则表达式和有限自动机的应用
1. 为什么谈有限自动机时要谈正则表达式?原因是:正则表达式所匹配的所有字符串所构成的语言可以用有限自动机识别.根本原因是:正则集(正则表达式所匹配的所有字符串集合)是由右线性文法(3型文法)所产生的 ...
- HTML4基本编译原理,Stanford公开课《编译原理》学习笔记(1~4课)
课程里涉及到的内容讲的还是很清楚的,但个别地方有点脱节,任何看不懂卡住的地方,请自行查阅经典著作<Compilers--priciples, Techniques and Tools>(也 ...
- 《编译原理》学习笔记 ·003【第二章:文法和语言(形式语言理论)-2】
注:前言.目录见 https://blog.csdn.net/qq_44220418/article/details/108428971 文章目录 三.文法和语言的分类 1.Chomsky语言分类法 ...
- 了解编译原理-笔记小结
这是之前学习编译原理过程中做下的笔记. 因能力有限,在很多地方都理解不到位,特别是对于词法分析与语法分析的过程感觉特别晦涩. 分享这个笔记也是为了自己做个总结,算是一个小的提纲吧,都没怎么深入解析编译 ...
最新文章
- C 语言 sizeof 用法
- 自定义android控件EditText 自定义边框 背景
- python 类属性及限制
- mvc html.displayfor,我想了解@ Html.DisplayFor(modelItem = item.FirstName)中的lambda表达式...
- 蝉联 Apache 最活跃项目,Flink 社区是如何保持高速发展的?
- 基础知识—函数-函数参数及返回值
- VScode编辑同步Markdown文档到印象笔记
- hdoj 2046 骨牌铺方格(递推)
- 中兴新支点操作系统挺好用的,国内电脑应预装国产操作系统
- 法向量变换矩阵的推导
- ValueError: operands could not be broadcast together with shapes (204,111104
- slim 搭建rnn_RNN入门(三)利用LSTM生成旅游点评
- 优化-规划问题(数学建模)
- java手机壁纸_java-爬取手机高清壁纸
- 北极熊秀舞步神似美国明星
- 在安卓应用开发过程中减小安卓应用大小的 9 种方法
- 六、C语言中的运算符与表达式
- 计算机相关的专刊,计算机 | 1区SCI期刊专刊信息1条
- 遍历操作__getitem__
- TS报错Error: xxx doesn‘t exist on type ‘xxx’
热门文章
- AndroidO Notification横幅通知(HangUp Notification)
- 一个强化学习 Q-learning 算法的简明教程
- OVERLAPPED结构体类型介绍及作用
- 人工智能 六步走 学习路线
- Windows系统下R语言环境搭建及高级图表绘制
- linux 文件格式latin1,Linux查看文件编码格式
- 我的为人处事真的有问题吗?
- 《中国高等教育学历认证报告》申请中,添加高等学历认证对话框中信息填写完后提示“信息有误”
- 【机器学习】逻辑斯蒂回归(Logistic Regression)详解
- modbus slave和modbus poll