编译原理-词法分析

NFA确定化算法

概念:在这里插入图片描述
在这里插入图片描述

子集法

在这里插入图片描述

  • 核心算法
    在这里插入图片描述
    – 子集法例子:
    在这里插入图片描述
    构造NFA:

① 首先计算ε-closure(0),令T0=ε-closure(0)={0,1,2,4,7},T0未被标记,它现在是子集族C的唯一成员。

② 标记T0;令T1=ε-closure(move(T0,a))={1,2,3,4,6,7,8},将T1加入C中,T1未被标记。
  令T2=ε-closure(move (T0,b))={1,2,4,5,6,7},将T2加入C中,它未被标记。

③ 标记T1;计算ε-closure(move(T1,a)),结果为{1,2,3,4,6,7,8},即T1,T1已在C中。
  计算ε-closure(move(T1,b)),结果为{1,2,4,5,6,7,9},令其为T3,T3加至C中,它未被标记。

④ 标记T2,计算ε-closure(move(T2,a)),结果为{1,2,3,4,6,7,8},即T1,T1已在C中。
  计算ε-closure(move(T2,b)),结果为{1,2,4,5,6,7},即T2,T2已在C中。

⑤ 标记T3,计算ε-closure(move(T3,a)),结果为{1,2,3,4,6,7,8},即T1。
  计算ε-closure(move(T3,b)),结果为{1,2,4,5,6,7,10},令其为T4,加入C中,T4未被标记。

⑥ 标记T4,计算ε-closure(move(T4,a)),结果为{1,2,3,4,6,7,8},即T1
  计算ε-closure(move(T4,b))结果为{1,2,4,5,6,7},即T2。
在这里插入图片描述
至此,算法终止共构造了五个子集:
  T0={0,1,2,4,7}
T1={1,2,3,4,6,7,8}
  T2={1,2,4,5,6,7}
T3={1,2,4,5,6,7,9}
  T4={1,2,4,5,6,7,10}
那么图4.4的NFA N构造的DFA M为
  ① S={[T0],[T1],[T2],[T3],[T4]}
  ② Σ={a,b}
③ D([T0],a)=[T1] D([T2],a)=[T1]
  D([T0],b)=[T2] D([T2],b)=[T2]
  D([T1],a)=[T1] D([T3],a)=[T1]
  D([T1],b)=[T3] D([T3],b)=[T4]
  D([T4],a)=[T1]
  D([T4],b)=[T2]
④ S0=[T0]
  
⑤ St=[T4]
不妨将[T0],[T1],[T2],[T3],[T4]重新命名,以利于书写,或用A,B,C,D,E或用0,1,2,3,4分别表示。若采用后者,该DFA M的状态转换图如下图所示
在这里插入图片描述= 例子
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

确定有穷自动机的化简

在这里插入图片描述

定义1 多余状态:从开始状态出发,任何输入串也不能到达的状态
定义2 等价状态:状态s和t的等价条件是:
① 状态S和T必须同时为终态或非终态
② 对于所有输入符号,S和T必须转换到等价的状态里
化简方法:
(1)将K划分为终态集和非终态集,得K’={Z,K-Z}。
 (2)递归地分割K’中的子集,使得任何两个不同子集的状态都是可区分的,而同一个子集中的状态都是等价的。
(3)K’中的每个子集合并为一个状态。
(4)含原初态的状态为初态;含原终态的状态为终态。

DFA最小化是指将一个确定性有限状态自动机(DFA)转换成具有最少状态数的等价DFA的过程。这个过程可以通过以下步骤完成:

1.为DFA构建状态转移表。
2.标记状态对(P,Q),其中P∈F,Q∉F(F是DFA的接受状态集合)。
3.对于每个标记为(P,Q)的状态对,将其标记为(Q,P)。
4.对于未标记的状态对(P,Q),找到输入符号a,使得δ(P,a)=X,δ(Q,a)=Y,且(X,Y)已标记。然后标记(P,Q)。
5.重复步骤4,直到不能再标记任何新的状态对为止。
6.将所有未被标记的状态对(P,Q)合并成一个状态,新的状态转移函数为:δ([P],[Q])=δ(P,a)=[Q],其中a是任何输入符号。
合并后的状态集合就是最小化DFA的状态集合。

正规表达式和有穷自动机

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值