1203正规式转换为有穷自动机

1 #include<stdio.h>2 #include <ctype.h>3 #define  ok   14 #define  error 05 #define  MAXREGLUARLONG 406 #define  MAXSTATELONG  40    7 #define  MAXCAHRSLONG   40  8 typedef  int state;9 int iCurrentState=0;   //初态以1开始10 int iPreState=0;11 int iLastForkState=0;12 int iForkState=0;13 int iMaxState=0;14 char cRegluarSting[MAXREGLUARLONG];       //输入的正规式字符串15 char cCharSet[MAXCAHRSLONG];              //字符集16 int  iStateMatrix[MAXSTATELONG][MAXCAHRSLONG];  //状态转换矩阵17 state vStoreRegluarSting()//把字符串读入一个缓冲区中18 {19     scanf("%s",cRegluarSting);20     return ok;21 }22 state vPreProcessRegluarSting()23 //对字符串进行预处理,去掉字符串里面的对分析不产生影响24 {25     int i=0;26     while(cRegluarSting[i]!='\0')27     {28         if(cRegluarSting[i]=='*')29         {30             int j=i+1;31             while(cRegluarSting[j-1]!='\0')32             { 33                 cRegluarSting[j-1]=cRegluarSting[j++];    34             }35         }36         i++;37     }38     return ok;39 }40 void vConstructStateMatrix(char cChar,int istate)//构造状态转换矩阵41 {42     int i;43     for(i=0;cCharSet[i]!='\0';i++)44         if(cChar==cCharSet[i])45             break;46     cCharSet[i]=cChar;47     iStateMatrix[iPreState][i]=istate;48 }49 void vAanalyseRegluarSting()//对字符串进行从左到右的分析与处理50 {51     int i=0;52     for(i=0;cRegluarSting[i]!=0;i++)53     {54         if(cRegluarSting[i]=='(')  //NFA出现开始分叉情况55         {56             int iTheFirstl=0;57             int iCharNumBeforl=0;58             iForkState=iCurrentState;59             while(cRegluarSting[i]!=')')60             {    61                 i++;62                 if(isalpha(cRegluarSting[i]))63                 {64                     if(cRegluarSting[i+1]==')')65                         iCurrentState=iLastForkState;66                     else67                     iCurrentState++;68                     iCharNumBeforl++;                    vConstructStateMatrix(cRegluarSting[i],iCurrentState);69                     iPreState=iCurrentState;70                     if(iCurrentState>iMaxState)71                         iMaxState=iCurrentState;72                 }73                 if(cRegluarSting[i]=='|')74                     {75                         iPreState=iForkState;76                         if(iTheFirstl==0)77                         {78                             iLastForkState=iCurrentState;    79                             iTheFirstl++;80                         }81                         if(iCharNumBeforl==1&&cRegluarSting[i+2]=='|')82                             iCurrentState=iForkState;83                         iCharNumBeforl=0;84                     }85                 if(cRegluarSting[i]==')')86                 {87                     iPreState=iForkState=iLastForkState;88                     iCurrentState=iMaxState;89                 }90             }91         }92         else93             {    94                 if(isalpha(cRegluarSting[i]))95                     {96                         iCurrentState++;                        vConstructStateMatrix(cRegluarSting[i],iCurrentState);97                         iPreState=iCurrentState;98                         if(iCurrentState>iMaxState)99                             iMaxState=iCurrentState;
100                     }
101             }            
102     }
103 }
104 void  vPrintfStateProjectFunction()
105 {    
106     int icCharSetPointer;
107     int iPreStatePointer;
108     for
109 (iPreStatePointer=0;iPreStatePointer<MAXSTATELONG;iPreStatePointer++) 
110     for(icCharSetPointer=0;icCharSetPointer<MAXSTATELONG;icCharSetPointer++)
111            if(iStateMatrix[iPreStatePointer][icCharSetPointer]>0)       printf("&(%d,%c)=%d\n",iPreStatePointer,cCharSet[icCharSetPointer],iStateMatrix[iPreStatePointer][icCharSetPointer]);    
112 }
113 void vPrintfNfa()//输出NFA
114 {
115     int iStateNumble;
116     int i=0;
117     printf("NFA的形式为:(S,$,&,S0,F)\n\n以下为NFA的具体集合内容:\n\n");
118     printf("字符集$为:{");
119     while(cCharSet[i]!=0)
120         if(cCharSet[i+1]==0)
121             printf("%c",cCharSet[i++]);
122         else
123             printf("%c,",cCharSet[i++]);
124     printf("}\n");
125     printf("\n状态集S为:{");
126     for (i=0;i<=iMaxState;i++) {
127         if(i==iMaxState)
128             printf("%d",i);
129         else
130             printf("%d,",i);
131     }
132     printf("}\n\n");
133     vPrintfStateProjectFunction();
134     printf("\n初态集S0为:{0}\n\n");
135     printf("终态集F为:{%d}",iMaxState);
136 }
137 void main()
138 {
139     vStoreRegluarSting();
140     vPreProcessRegluarSting();
141     vAanalyseRegluarSting();
142     vPrintfNfa();   
143 }
复制代码

转载于:https://www.cnblogs.com/RSTART/p/5017474.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258001.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[VMware WorkStation]虚拟机网络

1、简介&#xff1a; vmware为我们提供了三种网络工作模式&#xff0c;它们分别是&#xff1a;Bridged&#xff08;桥接模式&#xff09;、NAT&#xff08;网络地址转换模式&#xff09;、Host-Only&#xff08;仅主机模式&#xff09;。在我安装了vmware workstation player 1…

火狐中的CSS Grid Inspector新增强大的功能

2019独角兽企业重金招聘Python工程师标准>>> 上周&#xff0c;我谈到了日常的网站浏览我用Firefox&#xff0c;但是在切图网做前端开发的时候我会用Chrome。 随着每个版本&#xff0c;FF Nightly在开发工具箱中有一些越来越棒的工具&#xff0c;这些更新使Firefox成…

Linux内核态之间进程通信,内核态和用户态通信(二)--实现

本文主要使用netlink套接字实现中断环境与用户态进程通信。系统环境&#xff1a;基于linux 2.6.32.27 和 linux 3.16.36Linux内核态和用户态进程通信方法的提出和实现用户上下文环境运行在用户上下文环境中的代码是可以阻塞的&#xff0c;这样&#xff0c;便可以使用消息队列和…

上下文无关文法

在计算机科学中&#xff0c;若一个形式文法 G (N, Σ, P, S) 的产生式规则都取如下的形式&#xff1a;V -> w&#xff0c;则称之为上下文无关文法&#xff08;英语&#xff1a;context-free grammar&#xff0c;缩写为CFG&#xff09;&#xff0c;其中 V∈N &#xff0c;w∈…

linux脚本转换exe,Ps1 To Exe(powershell脚本转换EXE工具) V3.0.6 官方版

Ps1 To Exe是款将PowerShell脚本转换为EXE可执行文件的软件。同时软件非常小巧&#xff0c;功能实用&#xff0c;软件还支持各国的语言&#xff0c;有需要的小伙伴们不要错过了。(点击图片查看高清大图)【软件特色】1、Ps1 To Exe 支持多种语言2、Ps1 To Exe使用简单&#xff0…

NSString 练习

//将“⽂文艺⻘青年”改成“213⻘青年”。 NSString *str "文艺青年"; NSString *str1 [str stringByReplacingOccurrencesOfString:"文艺" withString:"213"]; NSLog("%",str1); //将 整数123 转换为字符串“123”。 NSString *s …

linux编译运行build.sh,linux下libwebsockets编译及实例

最近想自己搭建一个webscoket协议的服务器&#xff0c;打算用libwebsockts这个库。下载代码编译。编写一个shell脚本#!/bin/sh# wget http://git.warmcat.com/cgi-bin/cgit/libwebsockets/snapshot/libwebsockets-1.4-chrome43-firefox-36.tar.gz# tar xvzf libwebsockets-1.4-…

Tomcat如何配置环境变量

1&#xff0c; JDK&#xff1a;版本为jdk-7-windows-i586.exe 下载地址: http://www.oracle.com/technetwork/java/javase/downloads/index.html 2&#xff0c;tomcat&#xff1a;版本为apache-tomcat-7.0.33-windows-x86.zip 下载地址&#xff1a;http://tomcat.apache.org/ 2…

反编译查看源码dex2jar

为什么80%的码农都做不了架构师&#xff1f;>>> 上次说到了用apktool反编译&#xff0c;这次我们来用dex2jar 把apk解压得到文件夹 文件夹打开看到这些文件 其中这个classes.dex就是这次需要用到的字节码文件 把这个字节码文件托到dex2jar目录里 命令行编辑 得到下…

代码混淆之后定位线上bug

代码混淆的目的 代码混淆的目的是防止竞争对手通过反编译来阅读项目代码。 Android中通过ProGuard来做代码混淆&#xff08;当然也还有其他的产品可以做代码混淆&#xff09;。 bug日志反混淆 资料&#xff1a;错误log、mapping.txt 异常log&#xff1a; mapping.txt&#xff…

本地通知

本地通知&#xff0c;local notification&#xff0c;用于基于时间行为的通知&#xff0c;比如有关日历或者todo列表的小应用。另外&#xff0c;应用如果在后台执行&#xff0c;iOS允许它在受限的时间内运行&#xff0c;它也会发现本地通知有用。比如&#xff0c;一个应用&…

把windows装到linux下,如何将WSL(Windows Subsystem for Linux 2)安装到Windows 10?

原标题&#xff1a;如何将WSL(Windows Subsystem for Linux 2)安装到Windows 10&#xff1f;Windows 10凭借大受欢迎的WSL(Windows Subsystem for Linux)进入Linux领域。由于最近推出了WSL的最新版WSL2&#xff0c;用户现在可以利用实际的Linux内核从Windows执行Linux任务。现在…

vba执行linux命令,从VBA中的shell命令捕获输出值?

慕盖茨4494581根据Andrew Lessard的回答&#xff0c;这是一个运行命令并将输出作为字符串返回的函数 -Public Function ShellRun(sCmd As String) As StringRun a shell command, returning the output as a stringDim oShell As ObjectSet oShell CreateObject("WScript…

C#= 栈模仿堆的操作

//原理&#xff0c;利用两个栈&#xff0c;互相作用&#xff0c;来模仿堆的效果&#xff0c;先进先出。。 1 using System;2 using System.Collections.Generic;3 using System.Linq;4 using System.Threading.Tasks;5 6 namespace TwoStacksQueue7 {8 public class Progra…

linux中内部命令有哪些,linux内部命令有哪些

linux中常见的内部命令有&#xff1a;1.exit命令&#xff0c;退出当前的shell&#xff1b;2.history命令&#xff0c;显示历史执行过的命令&#xff1b;3.cd命令&#xff0c;切换当前工作目录&#xff1b;4.source命令&#xff0c;重新执行刚修改的初始化文件&#xff1b;5.ech…

POJ 2778

题意&#xff1a;很Uva项链题目类似。 区别&#xff1a; 1、字符串很多&#xff0c;用map hash超时&#xff0c;用Trie查找。 2、DFS判断连通&#xff0c;和并查集判连通&#xff0c;被我写错的地方时&#xff0c;查森林的时候&#xff0c;还是要Find_Set。 1 #include <ios…

linux挂载VMFS硬盘,ESX4.1挂载NFS共享存储(VMkernel)

要使用vmotion,iscsi,nfs功能&#xff0c;必须启用VMkernel端口&#xff0c;ESX 4.1默认不启用&#xff0c;ESXi 5.x默认启用。在 vCenter Server“SZVCENTER01”上调用对象“datastoreSystem-44”的“HostDatastoreSystem.CreateNasDatastore” 失败。挂载NFS存储的ESX控制台命…

2017年8个最流行的Web编程趋势

互联网一直在不断的发展&#xff0c;这意味着开发人员必须及时了解当前的所有变化。人们在新闻、社交、购物到银行等各大方面都与互联网有着千丝万缕的联系。因此&#xff0c;为了满足全球数百万网络用户的需求&#xff0c;Web开发需求正在上升。Web编程趋势是在W开发的过程中不…

gRPC-rs:从 C 到 Rust

介绍 在上篇文章中&#xff0c;我们讲到 TiKV 为了支持 [gRPC]&#xff0c;我们造了个轮子 [gRPC-rs]&#xff0c;这篇文章简要地介绍一下这个库。首先我们来聊聊什么是 gRPC。gRPC 是 Google 推出的基于 [HTTP2] 的开源 RPC 框架&#xff0c;希望通过它使得各种微服务之间拥有…

linux系统编程练手项目,精选 22 个 C++ 项目,编程小白练手首选!

C/C 做为元老级的编程语言&#xff0c;任时光更迭依旧屹立不倒&#xff0c;哪怕现在煊赫一时的AI&#xff0c;其底层也是用其编写。linux那么做为新手该如何快速上手 C 呢&#xff1f;固然是敲代码啊&#xff01;一切不写代码的学编程都是瞎搞。下面为你们精选了 22 个 C 项目&…