有穷状态自动机
实验三有限自动机的构造与识别
专业:商业软件工程 姓名:陈蔓嘉 学号:201506110245
一、 实验目的
1、掌握有穷状态自动机的概念;
2、掌握有穷状态自动机的存储及表示方法;
3、掌握有穷状态自动机与正则式之间的关系。
二、
实验要求
1、输入正规式;
2、构造该正规式的有穷状态自动机;
3. 以五元组形式输出。
三、 算法
1、 参见教材的转换规则。
四、 实验方法、步骤及结果测试
实验方法:
- 源程序名:压缩包文件(rar或zip)词法分析程序.zip
- 源程序名:词法分析程序.c
- 可执行程序名:词法分析程序.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 }
- 4.运行结果及分析