一、从NFA到DFA的转换
例如下图:
DFA的每个状态都是一个由NFA中的状态构成的集合,即NFA状态集合的一个子集
r =aa*bb*cc*
二、从带有ε-边的NFA到DFA的转换
r=0*1*2*
三、子集构造法( subset construction)
? 输入:NFA N
? 输出:接收同样语言的DFA D
? 方法:一开始,ε-closure ( s0 )是Dstates 中的唯一状态,且它未加标记;
while(在Dstates中有一个未标记状态T ) { 给T加上标记; for(每个输入符号a) { U = ε-closure(move(T, a)); if ( U不在Dstates中) 将U加入到Dstates中,且不加标记; Dtran[T, a]=U ; } }
四、计算 ε-closure (T )
将T的所有状态压入stack中;将ε-closure (T )初始化为 T ;
while(stack非空) { 将栈顶元素 t 给弹出栈中; for(每个满足如下条件的u :从t出发有一个标号为ε的转换到达状态u) if ( u不在ε-closure (T )中) { 将u加入到ε-closure (T )中;将u压入栈中; } }
原文地址:https://www.cnblogs.com/AndyEvans/p/10241031.html
时间: 2024-10-06 13:18:45