nfa确定化java代码_c语言编程NFA确定化.doc

c语言编程NFA确定化

NFA确定化为DFA

1.实验目的

设计并实现将NFA确定化为DFA的子集构造算法,从而更好地理解有限自动机之间的等价性,掌握词法分析器自动产生器的构造技术。该算法也是构造LR分析器的基础。

2.实验要求

设计并实现计算状态集合I的ε闭包的算法ε_Closure(I)和转换函数Move(I,a),并在此基础上实现子集构造算法Subset_Construction。利用该从NFA到DFA的转换程序Subset_Construction,任意输入一个NFA N=(S,Σ,δ,s0,F),输出一个接收同一语言的DFA M=(S’,Σ,δ’,s0’,F’)。

3.实验内容

令I是NFA N的状态集S的一个子集,I的ε闭包的ε_Closure(I)构造规则如下:

若s∈I,则s∈ε_Closure(I);

若s∈ε_Closure(I)且δ(s, ε)=s’而s’ ?ε_Closure(I) ,则s’∈ε_Closure(I)

根据上面的规则,下面给出了一个计算I的ε闭包的算法ε_Closure(I)。

SET S;

SETε_Closure(input)

SET *input;

{

S=input; /* 初始化 */

push(); /* 把输入状态集中的全部状态压入栈中 */

while(栈非空){

Nfa_state i;

pop(); /* 把栈顶元素弹出并送入i */

if(存在δ(i, ε)=j)

if(j不在S中) {

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值