1 # include <stdio.h>
2 # include <string.h>
3 # include <stdlib.h>
4 int E();
5 int G();
6 int T();
7 int Ss();
8 int F();
9 char a[52];
10 int total=0;
11 int i=0;
12 int temp=1;
13 int main()
14 {
15 gets(a);
16 int f;
17
18 f=E();
19 if(f==0)
20 return 0;
21 if(a[i] == '#')
22 printf("accept\n");
23 else
24 {
25 printf("error\n");
26 return 0;
27 }
28 }
29 int E()
30 {
31 int f,t;
32 printf("%d E-->TG\n",total++);
33 f=T();
34 if(!f)
35 return 0;
36 t=G();
37 if(!t)
38 return 0;
39 else
40 return 1;
41
42 }
43 int G()
44 {
45 int f,t;
46 if(a[i] == '+')
47 {
48 i++;
49 printf("%d G-->+TG\n",total++);
50 f=T();
51 if(!f)
52 return 0;
53 t=G();
54 if(!t)
55 return 0;
56 else
57 return 1;
58 }
59 else
60 {
61 printf("%d G-->&\n",total++);
62 return 1;
63 }
64
65 }
66 int T()
67 {
68 int f,t;
69 printf("%d T-->FS\n",total++);
70 f=F();
71 if(!f)
72 return 0;
73 t=Ss();
74 if(!t)
75 return 0;
76 else
77 return 1;
78 }
79 int Ss()
80 {
81 int f,t;
82 if(a[i] == '*')
83 {
84 i++;
85 printf("%d S-->*FS\n",total++);
86 f=F();
87 if(!f)
88 return 0;
89 t=Ss();
90 if(!t)
91 return 0;
92 else
93 return 1;
94 }
95 else
96 {
97 printf("%d S-->&\n",total++);
98 return 1;
99 }
100
101 }
102 int F()
103 {
104 int f,t;
105 if(a[i] == '(')
106 {
107 i++;
108 printf("%d F-->(E)\n",total++);
109 f=E();
110 if(!f)
111 return 0;
112 if(a[i] == ')')
113 i++;
114 else
115 {
116 printf("error\n");
117 return 0;
118 }
119 }
120 else if(a[i] == 'i')
121 {
122 i++;
123 printf("%d F-->i\n",total++);
124 }
125 return 1;
126 }
来源:http://www.cnblogs.com/liun1994/p/3784051.html