1 #include<stdio.h>
2
3 #include<string>
4
5 char str[10]; //记录要分析的字符串
6
7 int x=0; //记录第一个字符
8
9
10
11 void E();
12
13 void X();
14
15 void T();
16
17 void Y();
18
19 void F();
20
21
22
23 int main()
24
25 {
26
27 int len;
28
29 printf("请输入算数表达式:");
30
31 scanf("%s",str);
32
33 len=strlen(str);
34
35 str[len]='#';
36
37 str[len+1]='\0';
38
39 E();
40
41 printf("\n是正确表达式!\n");
42
43 strcpy(str,"");
44
45 x=0;
46
47 return 0;
48
49 }
50
51
52
53 void E()
54
55 {
56
57 T();
58
59 X();
60
61 }
62
63
64
65 void X()
66
67 {
68
69 if(str[x]=='+'||str[x]=='-')
70
71 {
72
73 x++;
74
75 T();
76
77 X();
78
79 }
80
81 }
82
83
84
85 void T()
86
87 {
88
89 F();
90
91 Y();
92
93 }
94
95
96
97 void Y()
98
99 {
100
101 if(str[x]=='*'||str[x]=='/')
102
103 {
104
105 x++;
106
107 F();
108
109 Y();
110
111 }
112
113 }
114
115
116
117 void F()
118
119 {
120
121 if(str[x]>='a'&&str[x]<='z')
122
123 {
124
125 x++;
126
127 }
128
129 else if(str[x]>=0&&str[x]<=9)
130
131 {
132
133 x++;
134
135 }
136
137 else if (str[x]=='(')
138
139 {
140
141 x++;
142
143 E();
144
145 if(str[x]==')')
146
147 {
148
149 x++;
150
151 }
152
153 else
154
155 {
156
157 printf("\n有语法错误!\n");
158
159 exit(0);
160
161 }
162
163 }
164
165 else
166
167 {
168
169 printf("\n有语法错误!\n"); exit(0); } }