Right = Exp2(input),
200 };
201 }
202 else if (Char(input, '-'))
203 {
204 e = new SubExpression
205 {
206 Left = e,
207 Right = Exp2(input),
208 };
209 }
210 else
211 {
212 break;
213 }
214 }
215 return e;
216 }
217
218 private static Expression UnsafeParse(char* input)
219 {
220 Expression result = Exp3(&input);
221 if ((int)*input == 0)
222 {
223 return result;
224 }
225 else
226 {
227 throw new ArgumentException("Expression contains unparsed tail, at " + new string(input));
228 }
229 }
230
231 public static Expression Parse(string s)
232 {
233 fixed (char* input = s.Trim())
234 {
235 return UnsafeParse(input);
236 }
237 }
238 }
239 }
240
下面是运行结果: 1 input: 1
2 parse: 1
3 reparse: 1
4 simplified: 1
5 contains x: False
6 contains y: False
7 dx: 0
8 dy: 0
9 simplified dx: 0
10 simplified dy: 0
11
12 input: 1.2
13 parse: 1.2
14 reparse: 1.2
15 simplified: 1.2
16 contains x: False
17 contains y: False
18 dx: 0
19 dy: 0
20 simplified dx: 0
21 simplified dy: 0
22
23 input: -3
24 parse: -3
25 reparse: -3
26 simplified: -3
27 contains x: False
28 contains y: False
29 dx: -0
30 dy: -0
31 simplified dx: 0
32 simplified dy: 0
33
34 input: 12+34
35 parse: (12 + 34)
36 reparse: (12 + 34)
37 simplified: 46
38 contains x: False
39 contains y: False
40 dx: (0 + 0)
41 dy: (0 + 0)
42 simplified dx: 0
43 simplified dy: 0
44
45 input: 56*78
46 parse: (56 * 78)
47 reparse: (56 * 78)
48 simplified: 4368
49 contains x: False
50 contains y: False
51 dx: ((0 * 78) + (56 * 0))
52 dy: ((0 * 78) + (56 * 0))
53 simplified dx: 0
54 simplified dy: 0
55
56 input: x^y
57 parse: (x ^ y)
58 reparse: (x ^ y)
59 simplified: (x ^ y)
60 contains x: True
61 contains y: True
62 dx: (y * (x ^ (y - 1)))
63 dy: ((x ^ y) * ln(x))
64 simplified dx: (y * (x ^ (y - 1)))
65 simplified dy: ((x ^ y) * ln(x))
66
67 input: x+2*y+4
68 parse: ((x + (2 * y)) + 4)
69 reparse: ((x + (2 * y)) + 4)
70 simplified: ((x + (2 * y)) + 4)
71 contains x: True
72 contains y: True
73 dx: ((1 + ((0 * y) + (2 * 0))) + 0)
74 dy: ((0 + ((0 * y) + (2 * 1))) + 0)
75 simplified dx: 1
76 simplified dy: 2
77
78 input: (x+y)*(3+4)
79 parse: ((x + y) * (3 + 4))
80 reparse: ((x + y) * (3 + 4))
81 simplified: ((x + y) * 7)
82 contains x: True
83 contains y: True
84 dx: (((1 + 0) * (3 + 4)) + ((x + y) * (0 + 0)))
85 dy: