令牌结构
我目前正在实现我自己的数学解析器 - 并且我有几个关于如何继续的问题。
到目前为止,我的解析器将输入字符串转换为令牌:
public class Token
{
final public String expression;
final public int value;
public Token(String expression, int value)
{
this.expression = expression;
this.value = value;
}
}
每个字符串表达式都是一个有效的条目号,运算符或函数。 Integer类型被传递给一个枚举来标识该标记。
当输入字符串被分离为令牌时,表达式将使用调车码算法进行分析。
我的问题 :我想令牌创建它们类型的对象。 一种做法可能是:
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成为上述之一?
他们可以有一个共同的接口:
interface Callable {
int getNumberOfArguments();
String getValue(String[] args);
}
链接地址: http://www.djcxy.com/p/66547.html
上一篇: token structure
下一篇: hand coding a parser