有穷状态自动机

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有穷状态自动机相关的知识,希望对你有一定的参考价值。

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

专业:商业软件工程   姓名:陈蔓嘉  学号: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.运行结果及分析

技术分享

 





以上是关于有穷状态自动机的主要内容,如果未能解决你的问题,请参考以下文章

学以致用--确定有穷状态自动机(DFA)

有穷自动机的构造与识别

如何将 不确定的有穷自动机(NFA) 转化为 确定的有穷自动机(DFA)

有穷自动机()

[Computation]有穷自动机

有穷状态自动机--一层循环迭代实现二叉树的前中后序遍历(对面试官降维打击)