有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    它们可以有一个公共接口:

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