令牌结构

我目前正在实现我自己的数学解析器 - 并且我有几个关于如何继续的问题。

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

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