编译原理nfa到dfa转化C语言,编译原理 从 NFA 到 DFA 的转换(非子集法)

编译原理 从 NFA 到 DFA 的转换(非子集法)

编译原理 | 从 NFA 到 DFA 的转换(非子集法)

词法分析:从 NFA 到 DFA 的转换

解题方法

1. 写出 K’

K’ 是 K 的全部子集,其中空集 Ø 可以剔除掉(即 K’ 为 K 的幂集)。注意这里 { } 要换成 [ ]。

2. 求 VT’

VT′=VT

V_{T'}=V_TVT′?=VT?

3. 求 S’

S′=[S]

S' = [S]S′=[S]

4. 求 M’

M′([S1,S2,…,Si],a)=[R1,R2,…,Rj]a∈VT

M'([S_1,S_2,\dots\ ,S_i],a) = [R_1,R_2,\dots\ ,R_j] \quad a \in V_TM′([S1?,S2?,…,Si?],a)=[R1?,R2?,…,Rj?]a∈VT?

看上去有点复杂,好像看不懂。没关系,看下面例题就懂了。

5. 求 Z’

Z′={[S1,S2,...,Sn]∣[S1,S2,…,Sn]∈K′且{S1,S2,…,Sn}∩Z≠?}

Z' = \{[S_1,S_2,...,S_n] | [S_1,S_2,\dots\ ,S_n] \in K' 且 \{S_1,S_2,\dots\ ,S_n\} \cap\ Z \neq\ \varnothing\ \}Z′={[S1?,S2?,...,Sn?]∣[S1?,S2?,…,Sn?]∈K′且{S1?,S2?,…,Sn?}∩Z??=?}

看上面公式很复杂,其实就是求 K’ 中含有 Z 的集合。

6. 改写

把 M’ 中的状态重命名一下,改写一下,画出 (DFA)M’ 的状态转换图。

例题

设 (NFA) M = ( {A, B}, {a, b}, M, {A}, {B} ) ,其中 M 定义如下:M (A, a) = {A, B} M (A, b) = {B} M (B, a) = ø M (B, b) = {A, B} 请构造相应确定有穷自动机 (DFA) M’。

解:

1. 写出 K’

K’ 的元素是 [A] [B] [A, B]

2. 求 VT’

VT′={a,b}

V_{T'}=\{a, b\}VT′?={a,b}

3. 求 S’

S′=[A]

S' = [A]S′=[A]

4. 求 M’

由于 M(A, a)={A, B},故有 M’([A], a)=[A, B]

同样 M’([A],b)=[B]

M’([B],a)= ø

M’([B],b)=[A,B]

由于 M({A,B},a)= M(A,a)U M(B,a)= {A,B}U ø= {A,B}

故 M’([A,B],a)= [A,B]

由于 M({A,B},b)= M(A,b)U M(B,b)={B}U {A,B} = {A,B}

故 M’([A,B],b)= [A,B]

5. 求 Z’

终态集 Z’={[A,B],[B]}

6. 改写

重新定义:令0=[A] 1=[B] 2=[A, B],则DFA如下所示:

d7e54792340c3ce486bb69cb91b0db5f.png

编译原理 从 NFA 到 DFA 的转换(非子集法)相关教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值