有穷状态自动机

实验三有限自动机的构造与识别

专业:商业软件工程   姓名:陈蔓嘉  学号:201506110245

一、   实验目的

1、掌握有穷状态自动机的概念;

2、掌握有穷状态自动机的存储及表示方法;

3、掌握有穷状态自动机与正则式之间的关系。

二、  
实验要求

1、输入正规式;

2、构造该正规式的有穷状态自动机;

3. 以五元组形式输出。

三、   
算法

1、 参见教材的转换规则。

四、  实验方法、步骤及结果测试

实验方法:

  1. 源程序名:压缩包文件(rarzip词法分析程序.zip
  2. 源程序名:词法分析程序.c
  3. 可执行程序名:词法分析程序.exe

算法:

 1 #include<stdio.h>
 2 #include<string.h>
 3 int i=0,j=0,x=0;
 4 int y;
 5 int number=2;
 6 int count=0;
 7 char ch;
 8 char a[100][100];
 9 main()
10 {
11     printf("\n 请输入正规式,以#结束 :");
12     ch=getchar();
13     do
14     {
15        if(ch==‘|‘)
16         {
17             a[i][j]=‘\0‘;
18             j=0;
19             i++;
20             ch=getchar();
21             continue;
22         }
23         a[i][j]=ch;
24         j++;
25         ch=getchar();
26     }while(ch!=‘#‘);
27     a[i][j]=‘\0‘;
28     for(x=0;x<=i;x++)
29     {
30         y=0;
31         count=1;
32         while(a[x][y]!=‘\0‘)
33         {
34             if(a[x][y]==‘.‘)
35             {
36                if(a[x][y]==‘.‘&& count==1)
37                {
38                  printf("\n f(0,%c)=%d\n",a[x][y-1],number);
39                  if(a[x][y+2]==‘\0‘)
40                   printf("\n f(%d,%c)=1\n",number,a[x][y+1]);
41                  number++;
42                  count=2;
43                }
44             else if(a[x][y]==‘.‘&& count!=1)
45                {
46                    printf("\n f(%d,%c)=%d\n",number-1,a[x][y-1],number);
47                    if(a[x][y+2]==‘\0‘)
48                     printf("\n f(%d,%c)=1\n",number,a[x][y+1]);
49                     number++;
50             }
51             }
52              if(a[x][y]==‘*‘)
53              {
54                if(a[x][y]==‘*‘&& count==1)
55               {
56                    printf("\n f(0,^)=%d\n",number);
57                    printf("\n f(%d,%c)=%d\n",number,a[x][y-1],number);
58                    if(a[x][y+1]==‘\0‘)
59                     printf("\n f(%d,^)=1\n",number);
60                    else
61                     printf("\n f(%d,^)=%d\n",number,number+1);
62                    number++;
63                    count=2;
64                }
65              else if(a[x][y]==‘*‘&& count!=1)
66                {
67                    printf("\n f(%d,%c)=%d\n",number,a[x][y-1],number);
68                    if(a[x][y+1]==‘\0‘)
69                     printf("\n f(%d,~)=1\n",number);
70                    else
71                     printf("\n f(%d,~)=%d\n",number,number+1);
72                    number++;
73                }
74             }
75             y++;
76         }
77     }
78
79 }
  1. 4.运行结果及分析

时间: 2024-12-23 04:57:41

有穷状态自动机的相关文章

构造该正规式的有穷状态自动机

#include<stdio.h> #include <ctype.h> #define ok 1 #define error 0 #define MAXREGLUARLONG 40 #define MAXSTATELONG 40 #define MAXCAHRSLONG 40 typedef int state; int iCurrentState=0; //初态以1开始 int iPreState=0; int iLastForkState=0; int iForkState=

有穷的自动机构造

#include<string.h>#include<stdio.h>#include<stdlib.h>int main(){ char p[30][30];//存放文法 char q[30][30]; int line=0; int n; int i,j; int count=0; int k,t=0; int flag=0; int l,m=0; char VN[30]={'\0'};//存放非终结符号 char VT[30]={'\0'};//存放终结符号 pr

自动机来了

#include<string.h> #include<stdio.h> #include<stdlib.h> int main() { char p[30][30]; char q[30][30]; int line=0; int n; int i,j; int count=0; int k,t=0; int flag=0; int l,m=0; char VN[30]={'\0'}; char VT[30]={'\0'}; printf("规则数:&quo

1211-有限自动机的构造与识别

#include<string.h>#include<stdio.h>#include<stdlib.h>int main(){char p[30][30];char q[30][30];int line=0;int n;int i,j;int count=0;int k,t=0;int flag=0;int l,m=0;char VN[30]={'\0'};char VT[30]={'\0'};printf("规则数:");scanf("

实验三

一.        实验目的 1.掌握有穷状态自动机的概念:  2.掌握有穷状态自动机的存储及表示方法:3.掌握有穷状态自动机与正则式之间的关系. 实验内容和要求 1.输入正规式: 2.构造该正规式的有穷状态自动机: 3. 以五元组形式输出. 练习: 2  (a|b)*abb 2  l(l|d)* 2  1(1010*|1(010)*1)*0   #include <stdio.h> //s为初态,z为终态 int in(int s,int z) { if(s == z) { printf(&

1203有穷自动机

#include<string.h>#include<stdio.h>#include<stdlib.h>int main(){    char p[30][30];//存放文法    char q[30][30];    int line=0;    int n;    int i,j;    int count=0;    int k,t=0;    int flag=0;    int l,m=0;    char VN[30]={'\0'};//存放非终结符号 

[leetcode]Valid Number @ Python

原题地址:http://oj.leetcode.com/problems/valid-number/ 题意:判断输入的字符串是否是合法的数. 解题思路:这题只能用确定有穷状态自动机(DFA)来写会比较优雅.本文参考了http://blog.csdn.net/kenden23/article/details/18696083里面的内容,在此致谢! 首先这个题有9种状态: 0初始无输入或者只有space的状态1输入了数字之后的状态2前面无数字,只输入了dot的状态3输入了符号状态4前面有数字和有do

实验三 有限自动机的构造与识别

一.实验目标 1.掌握有穷状态自动机的概念: 2.掌握有穷状态自动机的存储及表示方法: 3.掌握有穷状态自动机与正则式之间的关系. 二.实验要求 1.输入正规式: 2.构造该正规式的有穷状态自动机: 3. 以五元组形式输出. 三.算法 参见教材的转换规则. 练习: 2  (a|b)*abb 2  l(l|d)* 2  1(1010*|1(010)*1)*0 四.完成算法设计.编码和调试工作,完成实验报告. #include<string.h> #include<stdio.h> #

python re 模块小结

前言: 本人环境windows 7 64位,python2.7 re是什么: regular expression缩写,意为正则表达式,是python的众多模块之一 re用途: 从文本中有选择的批量抽取想要的文本碎片 re类型: 分为DFA(确定的有穷状态自动机)和NFA(非确定的有穷状态自动机) re的安装: 打开DOS:CD到pip目录下:输入命令pip install re re常用方法: 1.re.compile(pattern, flags=0) pattern是str类型的,例:pa