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 }