java数学解析器令牌结构
我目前正在实现我自己的数学解析器——我有一些关于如何继续的问题
到目前为止,我的解析器正在将输入字符串转换为令牌:
public class Token
{
final public String expression;
final public int value;
public Token(String expression, int value)
{
this.expression = expression;
this.value = value;
}
}
每个字符串(表达式)都是一个有效的条目号、运算符或函数。整数类型被传递到枚举中以标识令牌
当输入字符串被分成标记时,表达式将使用Shunting-yard算法进行解析
我的问题:我希望令牌创建其类型的对象。一种方法可能是:
public abstract class MathCommand
{
final static Hashtable<Character, Operator> operatorTable = new Hashtable<Character, Operator>()
{{
put('+', new Addition());
put('-', new Subtraction());
put('/', new Division());
put('*', new Multiplication());
}};
public abstract Object getMathCommand();
}
函数的类似哈希表
现在,类Token扩展了MathCommand,并且Token可以返回其类型的函数或运算符。缺点是令牌返回一个对象,而不是运算符或函数。运算符和函数中的方法之间的差异显然不大
操作员具有以下方法:
getValue(String number1, String number2);
函数具有以下方法:
getValue(String number);
我是否可以实现一个接口并将getValue方法重写为上述方法之一
# 1 楼答案
它们可以有一个公共接口: