《c语言编程NFA确定化》由会员分享,可在线阅读,更多相关《c语言编程NFA确定化(9页珍藏版)》请在人人文库网上搜索。

1、NFA确定化为DFA1实验目的设计并实现将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实验内容(1) 令I是NFA N的状态集S的一个子集,I的闭包的_Closure(。

2、I)构造规则如下:(a) 若sI,则s_Closure(I);(b) 若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中) 把i加到S中;把j压入栈中;return S; /* 。

3、返回_Closure(input)集合 */完成上述算法的设计。(2) 令I是NFA N的状态集S的一个子集,a, 转换函数Move(I,a)定义为:Move(I,a)= _Closure(J)其中,J=s|sI且(s,a)=s转换函数Move(I,a)的设计通过调用_Closure(input)实现,完成该函数的设计。(3) 从NFA N构造一个与其等价的DFA M的子集构造算法,就是要为DFA M构造状态转换表Trans,表中的每个状态是NFA N状态的集合,DFA M将“并行”地模拟NFA N面对输入符号串所有可能的移动。下面给出了子集构造算法Subset_Construction的框架。

4、,请完成其设计过程。有关数据结构:States 是一个M的数组,每个状态有两个域,set域存放N的状态集合,flg域为一标识。Trans 是M的转移矩阵(输入字母表元素个数最大状态数),Transia=下一状态。i M的当前状态号a 输入符号,aNstates M的下一新状态号S 定义M的一个状态的N的状态集初始化:States0.set=_Closure(N的初态)States0.flg=FALSENstates=1i=0S=Trans初始化为无状态-while(Statesi的flg为FALSE)Statesi.flg=TRUE;for(每个输入符号a)S=_Closure(Move(St。

5、atesi.set,a);if(S非空)if(States中没有set域等于 S的状态)StatesNstates.set=S;StatesNstates.flg=FALSE;Transia= Nstates+;elseTransia= States中一个set域为S的下标;此算法的输出M主要由Trans矩阵描述,其中省略了每个状态是否为终态的描述,应加以完善。4实验程序;#include#include#define MAXS 100using namespace std;string NODE; /结点集合string CHANGE; /终结符集合int N; /NFA边数struct e。

6、dgestring first;string change;string last;struct chanstring ltab;string jiheMAXS;void kong(int a)int i;for(i=0;iNODE.find(ai+1)b=ai;ai=ai+1;ai+1=b; void eclouse(char c,string &he,edge b)int k;for(k=0;khe.length()he+=bk.last;eclouse(bk.last0,he,b);void move(chan &he,int m,edge b)int i,j,k,l;k=he.ltab。

7、.length();l=he.jihem.length();for(i=0;ihe.jihem.length()he.jihem+=bj.last0; for(i=0;ihe.jihem.length()he.jihem+=bj.last0;/输出void outputfa(int len,int h,chan *t)int i,j,m;coutbi.first;if(bi.first=#) break;cinbi.changebi.last;N=i;/*for(j=0;jNODE.length()NODE+=bi.first;if(NODE.find(bi.last)NODE.length(。

8、)NODE+=bi.last;if(CHANGE.find(bi.change)CHANGE.length()&(bi.change!=*)CHANGE+=bi.change;len=CHANGE.length();coutendnode;for(i=0;iNODE.length()cout;move(ti,k,b); /求move(I,a)/coutednode.length()d0+=NODEi;endnode=ednode;coutendlDFA如下:endl;outputfa(len,h,t); /输出DFAcout其中终态为:endnodeendl;5. 实验截图:(注:文档可能无法思考全面,请浏览后下载,供参考。可复制、编制,期待你的好评与关注。

c语言编程nfa确定化,c语言编程NFA确定化相关推荐

  1. c语言是函数式原型的编程,编程范式|程序世界里的编程范式,探索编程本质

    最近看了一些关于编程范式的文章,简要做一些小结和记录 什么是编程范式 在现实生活中,为了适配各种规格的螺帽,我们需要许多种类的螺丝刀. 在编程世界中,静态语言有许多种类的数据类型. 不过,我们可以发现 ...

  2. python是什么语言开发的-少儿编程有什么好处?儿童编程课程学习Python的4大原因...

    儿童编程Python是什么课程? Python是强制用一种面向对象的解释型计算机程序设计语言,它是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public Li ...

  3. 编写c语言程序的可视化编程环境有哪些,C语言可视化编程环境设计及实现.pdf

    T 6YR&D c语言可视化编程环境设计及实现 李丽萍 (云南经济管理职业学院 ,云南昆明 650106) 摘 要 在计算机语言的使用过程中 ,对于语言的模式采取不断深化的实施方式 ,通过不断 ...

  4. 可编程渲染管线与着色器语言

    Programming pipeline & shading language 大家好,今天想给大家介绍一下可编程渲染管线和着色器语言的相关基础知识,使想上手SHADER编程的童鞋们可以快速揭 ...

  5. r语言 悲观剪枝_【R语言新书】前言Ⅲ—R语言编程思想

    张敬信:我的R语言新书信息汇总​zhuanlan.zhihu.com 0.3 R 语言编程思想 0.3.1 面向对象 R 是一种基于对象的编程语言,即在定义类的基础上,创建与操作对象:数值向量.函数. ...

  6. 扇贝编程可以用c语言吗,扇贝编程手机版下载_扇贝编程app下载 v1.1.41 - 87G手游网...

    扇贝编程app是一款实用的编程学习软件,为不同基础的用户制定了不同阶段的学习方案,从入门到应用一应俱全,包括基础课.网络爬虫.数据分析等内容,就算是新手小白也能在扇贝编程很快学会.扇贝编程app拥有丰 ...

  7. plc和c语言谁的前景好,PLC面向对象编程和梯形图逻辑,到底谁更实用一些?

    在工业自动化领域,梯形图逻辑仍然是最常用的编程语言之一,但对于更加复杂的控制对象,面向对象编程不失为一种高效率的方式.下面先来谈谈面向对象编程: 面向对象编程是计算机高级语言的一种先进的编程模式,在工 ...

  8. C语言报名里面培训怎么填,庄河c语言编程学习,庄河学c语言编程培训,庄河学c语言编程报个培训班怎么样...

    庄河c语言编程学习,庄河学c语言编程培训,庄河学c语言编程报个培训班怎么样 首页 > 软件 > 庄河c语言编程学习 作者:镀金池   发布时间:2017-11-29 11:13 明天利用时 ...

  9. Rockwell 罗克韦尔AB Logix 5000控制器 结构化文本语言(ST) 梯形图(LD)顺序功能图(SFC)功能块图(FBD) IEC 61131-3 手册

    Logix 5000 Controllers IEC 61131-3 Compliance 1756 ControlLogix, 1756 GuardLogix, 1769 CompactLogix, ...

  10. C语言已经被淘汰了吗,编程入门的最佳选择已经不是C语言了吗?

    已经不止是一个人讲到C语言在如今变幻莫测的编程领域过时了,还在十几年前大学的老师说过一句非常经典的话,现在想起来倒也不觉得过时. 学好C语言一定能找到工作!!! 这句话放在今天来看依然觉得不过时,可能 ...

最新文章

  1. JavaEE的13种核心技术
  2. 3D bin picking(散乱零件抓取)
  3. 关于Java中static关键字的用法以及从内存角度解析
  4. 漫画:996 的本质是什么?
  5. GMQ区块链生态系统平行链,未来将应用于众多产业
  6. python中常量池和堆_JVM详解之:运行时常量池
  7. requests模块中使用代理proxy发送请求
  8. 什么是WEBService,实现WEBService有哪些框架
  9. 绿色版本chrome设为默认浏览器
  10. 微信开发者工具添加企业微信小程序模拟器
  11. 1. Cloudcraft
  12. 为什么那么多城市房价开始跌了,还是有人相信房价会一直涨?
  13. 计算机基础知识 SERVER
  14. 卧槽!微信头像可以带圣诞帽啦!
  15. win10锁屏壁纸保存方法
  16. Automatic generation of PO (ME56 ME59N)
  17. MFC里面的一些实例应用
  18. idea:使用idea连接mysql数据库
  19. fast文件服务器的迁移,FastDfs数据迁移方案预研
  20. 诚之和:SQL Where – 子句示例

热门文章

  1. 美国计算机工程专业就业问题,【揭秘】美国就业率排名最高的5个专业 你都知道哪几个呢?...
  2. Django-合并migrations
  3. android 实现悬浮窗相机后台视频隐秘录制
  4. FJUT 2343 递归
  5. 购物清单(蓝桥杯C/C++省赛)
  6. 王淮:硅谷公司如何招人的一二事
  7. 计算机科学欧洲大学qs,2017QS世界大学综合排名汇总+专业排名汇总
  8. jpg转换成pdf格式免费
  9. 谈一谈拦截导航控制器返回事件(上)——OPP
  10. 宝可梦探险寻宝料理php,宝可梦探险寻宝料理怎样搭配_宝可梦探险寻宝料理配方搭配方式详解_玩游戏网...