1700474123
解析器的开发工作已经完成了,但是需求还没有完全实现。我们还需要对解析器进行封装,封装类Calculator如代码清单27-6所示。
1700474124
1700474125
代码清单27-6 解析器封装类
1700474126
1700474127
public class Calculator{
1700474128
1700474129
//定义表达式
1700474130
1700474131
private Expression expression;
1700474132
1700474133
//构造函数传参,并解析
1700474134
1700474135
public Calculator(String expStr){
1700474136
1700474137
//定义一个栈,安排运算的先后顺序
1700474138
1700474139
Stack<Expression>stack=new Stack<Expression>();
1700474140
1700474141
//表达式拆分为字符数组
1700474142
1700474143
char[]charArray=expStr.toCharArray();
1700474144
1700474145
//运算
1700474146
1700474147
Expression left=null;
1700474148
1700474149
Expression right=null;
1700474150
1700474151
for(int i=0;i<charArray.length;i++){
1700474152
1700474153
switch(charArray[i]){
1700474154
1700474155
case’+’://加法
1700474156
1700474157
//加法结果放到栈中
1700474158
1700474159
left=stack.pop();
1700474160
1700474161
right=new VarExpression(String.valueOf(charArray[++i]));
1700474162
1700474163
stack.push(new AddExpression(left,right));
1700474164
1700474165
break;
1700474166
1700474167
case’-‘:
1700474168
1700474169
left=stack.pop();
1700474170
1700474171
right=new VarExpression(String.valueOf(charArray[++i]));
1700474172
[
上一页 ]
[ :1.700474123e+09 ]
[
下一页 ]