我目前正在实施自己的数学解析器 - 我有一些关于如何继续的问题。
到目前为止,我的解析器正在将输入字符串转换为令牌:
public class Token
{
final public String expression;
final public int value;
public Token(String expression, int value)
{
this.expression = expression;
this.value = value;
}
}
每个String表达式都是有效的条目 - 数字,运算符或函数。 Integer类型被传递到枚举中以标识令牌。
当输入字符串被分成标记时,表达式将使用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();
}
和功能类似的Hashtable。
现在,类Token扩展了MathCommand - 并且Token可以返回函数或其类型的运算符。缺点是Token返回一个Object,而不是一个Operator或一个Function。运算符和函数中方法之间的区别显然不大。
运算符具有以下方法:
getValue(String number1, String number2);
一个函数有方法:
getValue(String number);
我可以以某种方式实现一个接口并覆盖方法getValue作为上述之一吗?
答案 0 :(得分:0)
他们可以有一个共同的界面:
interface Callable {
int getNumberOfArguments();
String getValue(String[] args);
}