1700474044
1700474045
this.key=_key;
1700474046
1700474047
}
1700474048
1700474049
//从map中取之
1700474050
1700474051
public int interpreter(HashMap<String,Integer>var){
1700474052
1700474053
return var.get(this.key);
1700474054
1700474055
}
1700474056
1700474057
}
1700474058
1700474059
抽象运算符号解析器如代码清单27-3所示。
1700474060
1700474061
代码清单27-3 抽象运算符号解析器
1700474062
1700474063
public abstract class SymbolExpression extends Expression{
1700474064
1700474065
protected Expression left;
1700474066
1700474067
protected Expression right;
1700474068
1700474069
//所有的解析公式都应只关心自己左右两个表达式的结果
1700474070
1700474071
public SymbolExpression(Expression_left,Expression_right){
1700474072
1700474073
this.left=_left;
1700474074
1700474075
this.right=_right;
1700474076
1700474077
}
1700474078
1700474079
}
1700474080
1700474081
这个解析过程还是比较有意思的,每个运算符号都只和自己左右两个数字有关系,但左右两个数字有可能也是一个解析的结果,无论何种类型,都是Expression的实现类,于是在对运算符解析的子类中增加了一个构造函数,传递左右两个表达式。具体的加、减法解析器如代码清单27-4、代码清单27-5所示。
1700474082
1700474083
代码清单27-4 加法解析器
1700474084
1700474085
public class AddExpression extends SymbolExpression{
1700474086
1700474087
public AddExpression(Expression_left,Expression_right){
1700474088
1700474089
super(_left,_right);
1700474090
1700474091
}
1700474092
1700474093
//把左右两个表达式运算的结果加起来
[
上一页 ]
[ :1.700474044e+09 ]
[
下一页 ]