前言:

  • 感觉习题册里的题都没有涉及几个概念之间的转换;
  • 遂拿出教材里的例题。


0 概念汇总

定义的汇总

对象 定义
文法 G = ( Σ , V , S , P ) G=(\Sigma, V, S, P) G=(Σ,V,S,P)
有限自动机 F A = ( Q , Σ , δ , q 0 , F ) FA=(Q, \Sigma, δ, q_0, F) FA=(Q,Σ,δ,q0,F)
下推自动机 P D A = ( Q , Σ , Γ , δ , q 0 , Z 0 , F ) PDA=(Q,\Sigma,\Gamma,\delta,q_0,Z_0,F) PDA=(Q,Σ,Γ,δ,q0,Z0,F)
图灵机 T M = ( Q , Σ , q 0 , q α , δ ) TM=(Q,\Sigma,q_0,q_{\alpha},\delta) TM=(Q,Σ,q0,qα,δ)


规则的汇总

对象 规则的定义
有限自动机 δ ( q , x ) = q ′ \delta(q,x)=q' δ(q,x)=q
下推自动机 < q , x , A , q ′ , A 1 A 2 ⋯ A i > <q,x,A,q',A_1A_2 \cdots A_i> <q,x,A,q,A1A2Ai>
图灵机 < q , x , q ′ , x ′ , { L , R , N } > <q,x,q',x',\{L,R,N\}> <q,x,q,x,{L,R,N}> 或者 δ ( q , x ) = ( q ′ , x ′ , { L , R , N } ) \delta(q,x)=(q',x',\{L,R,N\}) δ(q,x)=(q,x,{L,R,N})


格局的汇总

格局的定义:

对象 格局的定义
有限自动机 q w qw qw,其中 w w w 是剩余未被扫描的串
下推自动机 ( q , w , σ ) (q,w,\sigma) (q,w,σ),其中 w w w 是剩余未被扫描的串, σ \sigma σ 是当前栈内的符号
图灵机 w 1 q w 2 w_1qw_2 w1qw2,其中 w 1 w_1 w1 是读写头左边的串, w 2 w_2 w2 是读写头右边的串

格局的转换:

对象 格局的转换
有限自动机 δ ( q , x ) = q ′ \delta(q,x)=q' δ(q,x)=q 将导致: q x w ⇒ q ′ w qxw \Rightarrow q'w qxwqw
下推自动机 < q , x , A , q ′ , A 1 A 2 ⋯ A i > <q,x,A,q',A_1A_2 \cdots A_i> <q,x,A,q,A1A2Ai> 将导致: ( q , x w , A σ ) ⇒ ( q ′ , w , A 1 A 2 ⋯ A i σ ) (q,xw,A\sigma) \Rightarrow (q',w,A_1A_2 \cdots A_i\sigma) (q,xw,Aσ)(q,w,A1A2Aiσ)
图灵机 < q , x , q ′ , x ′ , L > <q,x,q',x',L> <q,x,q,x,L> 将导致: s 1 y q x s 2 ⇒ s 1 q ′ y x ′ s 2 s_1yqxs_2 \Rightarrow s_1q'yx's_2 s1yqxs2s1qyxs2


1 文法与有限自动机之间的转换

DFA 转换为 RLG

例: 已知形式语言 L = { { 0 , 1 } 1 ∗ 0 } ∗ L=\{\{0,1\}1^*0\}^* L={{0,1}10},请构造右线性文法接收该语言。

思路:

  • Step1:构造 DFA 接收 FSL,由此得到 δ \delta δ 转换函数。
  • Step2:把 δ \delta δ 转换函数转换为文法 G G G 的产生式。

解答:

  • 分析:该语言对应的正则表达式为 ( ( 0 + 1 ) 1 ∗ 0 ) ∗ ((0+1)1^*0)^* ((0+1)10)
  • 由此构造 DFA 接收该语言:

在这里插入图片描述

  • 从而得到 δ \delta δ 转换函数,将其转换为文法 G G G 的产生式:
DFA 的状态转换函数 RLG 的产生式
δ ( q 0 , 0 ) = q 1 \delta(q_0,0)=q_1 δ(q0,0)=q1 q 0 → 0 q 1 q_0 \rightarrow 0q_1 q00q1
δ ( q 0 , 1 ) = q 1 \delta(q_0,1)=q_1 δ(q0,1)=q1 q 0 → 1 q 1 q_0 \rightarrow 1q_1 q01q1
δ ( q 1 , 1 ) = q 1 \delta(q_1,1)=q_1 δ(q1,1)=q1 q 1 → 1 q 1 q_1 \rightarrow 1q_1 q11q1
δ ( q 1 , 0 ) = q 0 ∈ F \delta(q_1,0)=q_0 \in F δ(q1,0)=q0F q 1 → 0 q 0 ∣ 0 q_1 \rightarrow 0q_0 \mid 0 q10q00
δ ( q 0 , ε ) = q 0 ∈ F \delta(q_0,\varepsilon)=q_0 \in F δ(q0,ε)=q0F q 0 → ε q_0 \rightarrow \varepsilon q0ε

特别注意:状态函数 δ ( q , x ) = q ′ , q ′ ∈ F \delta(q,x)=q',q' \in F δ(q,x)=q,qF 对应的产生式是 q → x q ′ q \rightarrow xq' qxq q → x q \rightarrow x qx

  • 整理得到文法 G G G 的产生式如下:
    • q 0 → 0 q 1 ∣ 1 q 1 ∣ ε q_0 \rightarrow 0q_1 \mid 1q_1 \mid \varepsilon q00q11q1ε
    • q 1 → 1 q 1 ∣ 0 q 0 ∣ 0 q_1 \rightarrow 1q_1 \mid 0q_0 \mid 0 q11q10q00


RLG 转换为 NFA

例: 已知形式语言 L = { a b , a a } L=\{ab,aa\} L={ab,aa},请构造 NFA 接收该语言。

思路:

  • Step1:构造 RLG 接收该语言,由此得到文法 G G G 的产生式。
  • Step2:把文法 G G G 的产生式转换为 NFA 的 δ \delta δ 转换函数。
  • Step3:根据 NFA 的 δ \delta δ 转换函数绘制状态图。

解答:

  • 构造 RLG 如下:
    • S → a A S \rightarrow aA SaA
    • A → a ∣ b A \rightarrow a \mid b Aab
  • 将上述产生式转换为 NFA 的 δ \delta δ 转换函数:
RLG 的产生式 NFA 的状态转换函数
S → a A S \rightarrow aA SaA δ ( S , a ) = A \delta(S,a)=A δ(S,a)=A
A → a A \rightarrow a Aa δ ( A , a ) = q ∈ F \delta(A,a)=q \in F δ(A,a)=qF
A → b A \rightarrow b Ab δ ( A , b ) = q ∈ F \delta(A,b)=q \in F δ(A,b)=qF
  • 根据 NFA 的 δ \delta δ 转换函数绘制状态图:

在这里插入图片描述



2 有限自动机之间的转换

NFA 转换为 DFA

例 1: 构造 DFA 接收 { 0 , 1 } \{0,1\} {0,1} 上的语言,该语言中每个字符串在被当成二进制数时,能够被 2 整除。

思路:

  • Step1:构造 NFA 接收该语言。
  • Step2:将 NFA 转换为 DFA 。

解答:

  • 分析:该语言对应的正则表达式为 ( 0 + 1 ) ∗ 0 (0+1)^*0 (0+1)0
  • 由此构造 NFA 接收该语言:

在这里插入图片描述

  • 通过表格法,将 NFA 转换为 DFA:
状态集合 P 0 1
{ q 0 } \{q_0\} {q0} { q 0 , q 1 } \{q_0,q_1\} {q0,q1} { q 0 } \{q_0\} {q0}
{ q 0 , q 1 } , q 1 ∈ F \{q_0,q_1\}, q_1 \in F {q0,q1},q1F { q 0 , q 1 } \{q_0,q_1\} {q0,q1} { q 0 } \{q_0\} {q0}

注意:DFA 的开始状态 q 0 ′ q_0' q0 等于 NFA 的开始状态集合 Q 0 Q_0 Q0

  • 根据表格绘制 DFA 的状态图:

在这里插入图片描述



例 2: 构造 DFA 接收语言
L = { w ∣ w ∈ { a , b , c } + , ∣ w ∣ > 1 , w  中最后的字母与第一个字母相同 } L=\{w\mid w\in \{a,b,c\}^+,|w|>1,w\ 中最后的字母与第一个字母相同\} L={ww{a,b,c}+,w>1,w 中最后的字母与第一个字母相同}

思路:

  • Step1:构造 NFA 接收该语言。
  • Step2:将 NFA 转换为 DFA 。

解答:

  • 分析:该语言对应的正则表达式为 a R ∗ a + b R ∗ b + c R ∗ c aR^*a+bR^*b+cR^*c aRa+bRb+cRc,其中 R = ( a + b + c ) R=(a+b+c) R=(a+b+c)
  • 由此构造 NFA 接收该语言:

在这里插入图片描述

  • 通过表格法,将 NFA 转换为 DFA:
状态集合 P a b c
{ q 0 } \{q_0\} {q0} { q 1 } \{q_1\} {q1} { q 2 } \{q_2\} {q2} { q 3 } \{q_3\} {q3}
{ q 1 } \{q_1\} {q1} { q 1 , q 4 } \{q_1,q_4\} {q1,q4} { q 1 } \{q_1\} {q1} { q 1 } \{q_1\} {q1}
{ q 2 } \{q_2\} {q2} { q 2 } \{q_2\} {q2} { q 2 , q 4 } \{q_2,q_4\} {q2,q4} { q 2 } \{q_2\} {q2}
{ q 3 } \{q_3\} {q3} { q 3 } \{q_3\} {q3} { q 3 } \{q_3\} {q3} { q 3 , q 4 } \{q_3,q_4\} {q3,q4}
{ q 1 , q 4 } \{q_1,q_4\} {q1,q4} { q 1 , q 4 } \{q_1,q_4\} {q1,q4} { q 1 } \{q_1\} {q1} { q 1 } \{q_1\} {q1}
{ q 2 , q 4 } \{q_2,q_4\} {q2,q4} { q 2 } \{q_2\} {q2} { q 2 , q 4 } \{q_2,q_4\} {q2,q4} { q 2 } \{q_2\} {q2}
{ q 3 , q 4 } \{q_3,q_4\} {q3,q4} { q 3 } \{q_3\} {q3} { q 3 } \{q_3\} {q3} { q 3 , q 4 } \{q_3,q_4\} {q3,q4}
  • 根据表格绘制 DFA 的状态图:

在这里插入图片描述



ε-NFA 转换为 NFA

转换方法如下:

  • 计算 NFA 的状态转换函数 δ ′ \delta' δ δ ′ ( q , x ) = δ ∗ ( { q } , x ) \delta'(q,x)=\delta^*(\{q\},x) δ(q,x)=δ({q},x)
  • 确定 NFA 的接收状态 F ′ F' F
    • F ∩ ε -CLOSURE ( q 0 ) ≠ ϕ F \cap \varepsilon \text{-CLOSURE}(q_0) \ne \phi Fε-CLOSURE(q0)=ϕ,则 F ′ = F ∩ { q 0 } F'=F \cap \{q_0\} F=F{q0}
    • F ∩ ε -CLOSURE ( q 0 ) = ϕ F \cap \varepsilon \text{-CLOSURE}(q_0) = \phi Fε-CLOSURE(q0)=ϕ,则 F ′ = F F'=F F=F

例: 请将下述 ε-NFA 转换为 NFA 。

在这里插入图片描述

解答:

  • 计算状态转换函数:
    • δ ′ ( q 0 , 0 ) = δ ∗ ( { q 0 } , 0 ) = { q 0 , q 1 , q 2 } \delta'(q_0,0)=\delta^*(\{q_0\},0)=\{q_0,q_1,q_2\} δ(q0,0)=δ({q0},0)={q0,q1,q2}
    • δ ′ ( q 0 , 1 ) = δ ∗ ( { q 0 } , 1 ) = { q 1 , q 2 } \delta'(q_0,1)=\delta^*(\{q_0\},1)=\{q_1,q_2\} δ(q0,1)=δ({q0},1)={q1,q2}
    • δ ′ ( q 0 , 2 ) = δ ∗ ( { q 0 } , 2 ) = { q 2 } \delta'(q_0,2)=\delta^*(\{q_0\},2)=\{q_2\} δ(q0,2)=δ({q0},2)={q2}
    • δ ′ ( q 1 , 0 ) = δ ∗ ( { q 1 } , 0 ) = 无定义 \delta'(q_1,0)=\delta^*(\{q_1\},0)=无定义 δ(q1,0)=δ({q1},0)=无定义
    • δ ′ ( q 1 , 1 ) = δ ∗ ( { q 1 } , 1 ) = { q 1 , q 2 } \delta'(q_1,1)=\delta^*(\{q_1\},1)=\{q_1,q_2\} δ(q1,1)=δ({q1},1)={q1,q2}
    • δ ′ ( q 1 , 2 ) = δ ∗ ( { q 1 } , 2 ) = { q 2 } \delta'(q_1,2)=\delta^*(\{q_1\},2)=\{q_2\} δ(q1,2)=δ({q1},2)={q2}
    • δ ′ ( q 2 , 0 ) = δ ∗ ( { q 2 } , 0 ) = 无定义 \delta'(q_2,0)=\delta^*(\{q_2\},0)=无定义 δ(q2,0)=δ({q2},0)=无定义
    • δ ′ ( q 2 , 1 ) = δ ∗ ( { q 2 } , 1 ) = 无定义 \delta'(q_2,1)=\delta^*(\{q_2\},1)=无定义 δ(q2,1)=δ({q2},1)=无定义
    • δ ′ ( q 2 , 2 ) = δ ∗ ( { q 2 } , 2 ) = { q 2 } \delta'(q_2,2)=\delta^*(\{q_2\},2)=\{q_2\} δ(q2,2)=δ({q2},2)={q2}
  • 确定接收状态:
    • F ∩ ε -CLOSURE ( q 0 ) = q 2 ∩ { q 0 , q 1 , q 2 } ≠ ϕ F \cap \varepsilon \text{-CLOSURE}(q_0) = {q_2} \cap \{q_0,q_1,q_2\} \ne \phi Fε-CLOSURE(q0)=q2{q0,q1,q2}=ϕ,故 F ′ = F ∩ { q 0 } = { q 0 , q 2 } F'=F \cap \{q_0\}=\{q_0,q_2\} F=F{q0}={q0,q2}
  • 根据 NFA 的 δ \delta δ 转换函数绘制状态图:

在这里插入图片描述



3 文法与下推自动机之间的转换

CFG 转换为单态 PDA

例: 已知形式语言 L = { a n b n ∣ n ≥ 1 } L=\{a^nb^n \mid n \ge 1\} L={anbnn1},请构造 PDA 接收该语言。

思路:

  • Step1:构造 CFG 接收该语言,由此得到文法 G G G 的产生式。
  • Step2:把文法 G G G 的产生式转换为单态 PDA 的规则。

解答:

  • 构造 CFG 如下:
    • S → a S B ∣ a B S \rightarrow aSB \mid aB SaSBaB
    • B → b B \rightarrow b Bb
  • 把文法 G G G 的产生式转换为单态 PDA 的规则:
CFG 的产生式 单态 PDA 的规则
S → a S B S \rightarrow aSB SaSB < a , S , S B > <a,S,SB> <a,S,SB>
S → a B S \rightarrow aB SaB < a , S , B > <a,S,B> <a,S,B>
B → b B \rightarrow b Bb < b , B , ε > <b,B,\varepsilon> <b,B,ε>

Q:为啥教材里讲完 RLG 到单态 PDA 的转换要出这个例题?这也不是右线性文法啊?



单态 PDA 转换为 CFG

例: 请将下述单态 PDA 转换为 CFG 。

解答:

单态 PDA 的规则 CFG 的产生式
< a , Z 0 , A Z 0 > <a, Z_0,AZ_0> <a,Z0,AZ0> S → a A S S \rightarrow aAS SaAS
< b , Z 0 , B Z 0 > <b, Z_0,BZ_0> <b,Z0,BZ0> S → b B S S \rightarrow bBS SbBS
< a , A , A A > <a, A, AA> <a,A,AA> A → a A A A \rightarrow aAA AaAA
< b , B , B B > <b, B, BB> <b,B,BB> B → b B B B \rightarrow bBB BbBB
< a , B , ε > <a, B, \varepsilon> <a,B,ε> B → a B \rightarrow a Ba
< b , A , ε > <b, A, \varepsilon> <b,A,ε> A → b A \rightarrow b Ab
< ε , Z 0 , ε > <\varepsilon, Z_0, \varepsilon> <ε,Z0,ε> S → ε S \rightarrow \varepsilon Sε
  • 整理得到文法 G G G 的产生式如下:
    • S → a A S ∣ b B S ∣ ε S \rightarrow aAS \mid bBS \mid \varepsilon SaASbBSε
    • A → a A A ∣ b A \rightarrow aAA \mid b AaAAb
    • B → b B B ∣ a B \rightarrow bBB \mid a BbBBa


4 有限自动机与下推自动机之间的转换

NFA 转换为单态 PDA

转换方法如下:

NFA 的状态转换函数 单态 PDA 的规则
δ ( q , x ) = { q 1 , q 2 , ⋯   , q n } \delta(q,x)=\{q_1,q_2,\cdots,q_n\} δ(q,x)={q1,q2,,qn} < x , q , q 1 > , < x , q , q 2 > , ⋯   , < x , q , q n > <x,q,q_1>,<x,q,q_2>,\cdots,<x,q,q_n> <x,q,q1>,<x,q,q2>,,<x,q,qn>

说明:没有例题。



Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐