thompson算法地实现

thompson算法地实现

ID:35939281

大小:526.00 KB

页数:18页

时间:2019-04-26

thompson算法地实现_第1页
thompson算法地实现_第2页
thompson算法地实现_第3页
thompson算法地实现_第4页
thompson算法地实现_第5页
资源描述:

《thompson算法地实现》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、实用文案实验二:THOMPSON算法的实现一.实验目的掌握THOMPSON算法原理和方法。二.实验要求、内容及步骤1.输入字母表上的正规式r,输出一个接受L(r)的NFA;2.采用C++语言,实现该算法;3.编制测试程序4.调试程序;三.实验设备计算机、Windows操作系统、VisualC++程序集成环境。四.实验原理Thompson构造法:从正规表达式构造NFA输入:字母表Σ上的一个正规表达式r输出:接受L(r)的NFAN方法:将r分解成最基本的子表达式,使用下面的规则1和2为r的每个基本符号(ε或Σ中的符号)构造NFA。用规则3逐步组合前面构造

2、的NFA,直到获得整个正规表达式的NFA为止。规则1.对ε,构造NFA标准文档实用文案这里i是新的开始状态,f是新的接受状态。很明显这个NFA识别{ε}。规则2.对于Σ中的每个符号a,构造NFA同样,i是新的开始状态,f是新的接受状态。这个NFA识别{a}。规则3.如果N(s)和N(t)是正规表达式s和t的NFA,则:①对于正规表达式s

3、t,可构造复合的NFAN(s

4、t):②对于正规表达式st,可构造复合的NFAN(st):③对于正规表达式s*,构造复合的NFAN(s*):标准文档实用文案④对于括起来的正规表达式(s),使用N(s)本身作为它的NFA

5、。在构造过程中,每次构造的新状态都要赋予不同的名字。这样,任何NFA的两个状态都具有不同的名字。即使同一符号在r中出现多次,我们也要为该符号的每个实例创建一个独立的带有自己状态的NFA。标准文档实用文案五.程序设计框架标准文档实用文案六.程序流程图七.实验代码核心代码如下:#ifndefTHOMPSON_H#defineTHIMPSON_H#include#include#include#includeusingnamespacestd;标准文档实用文案#defineMAX100//

6、节点,定义成结构体,便于以后扩展structstate{stringStateName;};//边空转换符永'#'表示structedge{stateStartState;stateEndState;charTransSymbol;};//单元structcell{edgeEdgeSet[MAX];intEdgeCount;stateStartState;stateEndState;};//全局变量声明//intEDGE_NUM=0;intSTATE_NUM=0;//intCELL_NUM=0;//函数声明voidinput(string&);int

7、check_legal(string);intcheck_character(string);intcheck_parenthesis(string);intis_letter(char);stringadd_join_symbol(string);//中缀转后缀stringpostfix(string);//优先级instackpriorityintisp(char);//优先级incomingpriorityintscp(char);//表达式转NFAcellexpress_2_NFA(string);//处理a

8、b标准文档实用文案celldo_

9、Unite(cell,cell);//处理abcelldo_Join(cell,cell);//处理a*celldo_Star(cell);//处理acelldo_Cell(char);//将一个单元的边的集合复制到另一个单元voidcell_EdgeSet_Copy(cell&,cell);//产生一个新的状态节点,便于管理statenew_StateNode();//显示voidDisplay(cell);#endif#include"Thompson.h"//主函数,voidmain(){stringRegular_Expression="(a

10、

11、b)*abb";cellNFA_Cell;Regular_Expression="(a

12、b)*abb";//接受输入input(Regular_Expression);//调试需要先屏蔽//添加“+”,便于转后缀表达式Regular_Expression=add_join_symbol(Regular_Expression);//中缀转后缀Regular_Expression=postfix(Regular_Expression);//表达式转NFANFA_Cell=express_2_NFA(Regular_Expression);//显示Dis

13、play(NFA_Cell);}/**表达式转NFA处理函数,返回最终的NFA结合*/cellexpress

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。