Math Parser - 令牌结构

时间:2015-05-15 07:31:04

标签: java parsing math

我目前正在实施自己的数学解析器 - 我有一些关于如何继续的问题。

到目前为止,我的解析器正在将输入字符串转换为令牌:

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作为上述之一吗?

1 个答案:

答案 0 :(得分:0)

他们可以有一个共同的界面:

interface Callable {
    int getNumberOfArguments();
    String getValue(String[] args);
}