有穷自动机的转换

Posted 笑看风云动

tags:

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

 1 #include<stdio.h>
 2 main()
 3 {
 4     int i=0,j=0,x=0,y;
 5     int number=2;
 6     int count=0;
 7     char ch;
 8     char a[100][100];
 9     printf("请输入正规式以#结束 :\n");
10     printf("^代表空\n");
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 
37                if(a[x][y]==.&& count==1)     
38                {
39                  printf("f(0,%c)=%d\n",a[x][y-1],number);
40                  if(a[x][y+2]==\0)
41                   printf("f(%d,%c)=1\n",number,a[x][y+1]);
42                  number++;
43                  count=2;
44                }
45 
46             else if(a[x][y]==.&& count!=1)
47                {
48 
49                    printf("f(%d,%c)=%d\n",number-1,a[x][y-1],number);
50                    if(a[x][y+2]==\0)
51                     printf("f(%d,%c)=1\n",number,a[x][y+1]);
52                     number++;
53             }
54             }
55              if(a[x][y]==*)
56              {
57                if(a[x][y]==*&& count==1)
58               {
59                    printf("f(0,^)=%d\n",number);
60                    printf("f(%d,%c)=%d\n",number,a[x][y-1],number);
61                    if(a[x][y+1]==\0)
62                     printf("f(%d,^)=1\n",number);
63                    else
64                     printf("f(%d,^)=%d\n",number,number+1);
65                    number++;
66                    count=2;
67                }
68 
69              else if(a[x][y]==*&& count!=1)
70                {
71 
72                    printf("f(%d,%c)=%d\n",number,a[x][y-1],number);
73                    if(a[x][y+1]==\0)
74                     printf("f(%d,^)=1\n",number);
75                    else
76                     printf("f(%d,^)=%d\n",number,number+1);
77                    number++;
78                }
79             }
80             y++;
81         }
82     }
83 
84 }

 

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

正规文法正规式 有穷自动机

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

编译原理词法分析

NFA到DFA的转换及DFA的简化

编译原理词法分析

简易有穷自动机实验