简单有限自动机

  1 #include<stdio.h>
  2 #include<string.h>
  3 #define N 50
  4 
  5 
  6 void main()
  7 {
  8        int i;
  9        static char x[N];
 10        int n; 
 11        int temp;
 12        int semp1=0;
 13        int semp2=0;
 14        int semps,semp3;
 15        printf("输入简单正规式:");
 16        scanf("%s",&x);
 17        n=strlen(x);
 18        for(i=0;i<n;i++)
 19        {
 20            if(x[i]=='|') 
 21            {
 22                temp=i;
 23                break;
 24            }
 25        }
 26        if(i==n&&x[i-1]!='|') temp=n;
 27        for(i=0;i<temp;i++)
 28        {
 29               if(x[i]=='*')
 30               {
 31                printf("f<%d,$>=%d\n",semp1,semp1+1);
 32                semp1=semp1+1;
 33                printf("f<%d,%c>=%d\n",semp1,x[i-1],semp1);
 34                printf("f<%d,$>=%d\n",semp1,semp1+1);
 35                semp1=semp1+1;
 36               }
 37               else if(x[i]!='*'&&x[i+1]!='*')
 38               {
 39                printf("f<%d,%c>=%d\n",semp1,x[i],semp1+1);
 40                semp1=semp1+1;
 41               }
 42               semps=semp1;
 43        }
 44        for(i=temp+1;i<n;i++)
 45        {
 46               if(i==temp+1)
 47               {
 48                semp2=0;
 49                if(((i==n-1)&&(x[i!='*']))||(i==(n-2))&&(x[i+1]=='*'))
 50                {
 51                    semp3=semps;
 52                    if(x[i]=='*')
 53                    {
 54                        printf("f<%d,~>=%d\n",semp2,semp1+1);
 55                        semp1=semp1+1;
 56                        printf("f<%d,%c>=%d\n",semp1,x[i-1],semp1);
 57                        printf("f<%d,~>=%d\n",semp1,semp3);
 58                        semp1=semp1+1;
 59                    }
 60                    else if(x[i]!='*'&&x[i+1]!='*')
 61                    {
 62                        printf("f<%d,%c>=%d\n",semp2,x[i],semp1);
 63                        semp1=semp1+1;
 64                    }
 65                    else if(x[i]!='*'&&x[i+1]=='*')
 66                    {
 67                        printf("f<%d,~>=%d\n",semp2,semp1+1);
 68                        semp1=semp1+1;
 69                        printf("f<%d,%c>=%d\n",semp1,x[i],semp1);
 70                        printf("f<%d,~>=%d\n",semp1,semp3);
 71                        semp1=semp1+1;
 72                    }
 73                    else if(((i-1)==(n-2))&&(x[i+1]=='*'))
 74                        {
 75                        printf("f<%d,~>=%d\n",semp2,semp1+1);
 76                        semp1=semp1+1;
 77                        printf("f<%d,%c>=%d\n",semp1,x[i],semp1);
 78                        printf("f<%d,~>=%d\n",semp1,semp3);
 79                        semp1=semp1+1;
 80                    }
 81                }
 82                
 83                else
 84                {
 85                    semp3=semps;
 86                    if((x[i]=='*')&&((i-1)!=temp+1))
 87                    {
 88                        printf("f<%d,$>=%d\n",semp2,semp1+1);
 89                        semp1=semp1+1;
 90                        printf("f<%d,%c>=%d\n",semp1,x[i-1],semp1);
 91                        printf("f<%d,$>=%d\n",semp1,semp1+1);
 92                        semp1=semp1+1;
 93                    }
 94                    else if(x[i]!='*'&&x[i+1]!='*')
 95                    {
 96                        printf("f<%d,%c>=%d\n",semp2,x[i],semp1+1);
 97                        semp1=semp1+1;
 98                    }
 99                    else if(x[i]!='*'&&x[i+1]=='*'&&i==n-1)
100                        {
101                        printf("f<%d,$>=%d\n",semp2,semp1+1);
102                        semp1=semp1+1;
103                        printf("f<%d,%c>=%d\n",semp1,x[i],semp1);
104                        printf("f<%d,$>=%d\n",semp1,semp3);
105                        semp1=semp1+1;
106                    }
107                    else if(x[i]!='*'&&x[i+1]=='*'&&i==temp+1&&i!=n-2)
108                        {
109                        printf("f<%d,$>=%d\n",semp2,semp1+1);
110                        semp1=semp1+1;
111                        printf("f<%d,%c>=%d\n",semp1,x[i],semp1);
112                        printf("f<%d,$>=%d\n",semp1,semp1+1);
113                        semp1=semp1+1;
114                    }
115                    
116                }
117                
118            } 
119               
120 
121 
122               else
123               { 
124                 semp3=semps;
125                if(i==n-1)
126                {
127                    /*if(x[i]=='*')
128                    {
129                        printf("f<%d,~>=%d\n",semp1,semp1+1);
130                        semp1=semp1+1;
131                        printf("f<%d,%c>=%d\n",semp1,x[i-1],semp1);
132                        printf("f<%d,~>=%d\n",semp1,semp3);
133                        semp1=semp1+1;
134                    }*/
135                   
136                   if(x[i]!='*'&&x[i+1]!='*')
137                    {
138                        printf("f<%d,%c>=%d\n",semp1,x[i],semp3);
139                        semp1=semp1+1;
140                    }
141                }
142                
143                else
144                {
145                    if((x[i]=='*')&&(i-1!=temp+1))
146                    {
147                        printf("f<%d,$>=%d\n",semp1,semp1+1);
148                        semp1=semp1+1;
149                        printf("f<%d,%c>=%d\n",semp1,x[i-1],semp1);
150                        printf("f<%d,$>=%d\n",semp1,semp1+1);
151                        semp1=semp1+1;
152                    }
153                    else if(x[i]!='*'&&x[i+1]!='*')
154                    {
155                        printf("f<%d,%c>=%d\n",semp1,x[i],semp1+1);
156                        semp1=semp1+1;
157                    }
158 
159                    else if((x[i]!='*'&&x[i+1]=='*')&&(i!=temp+1))
160                    {
161                        printf("f<%d,~>=%d\n",semp1,semp1+1);
162                        semp1=semp1+1;
163                        printf("f<%d,%c>=%d\n",semp1,x[i],semp1);
164                        printf("f<%d,~>=%d\n",semp1,semp3);
165                        semp1=semp1+1;
166                    }
167                }
168                
169            } 
170        }
171 } 

 

posted on 2016-12-08 10:08  228黄施策  阅读(101)  评论(0编辑  收藏  举报

导航