【问题标题】:Math Parser - token structure数学解析器 - 令牌结构
【发布时间】:2015-05-15 07:31:03
【问题描述】:

我目前正在实现我自己的数学解析器 - 我对如何进行有几个问题。

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

public class Token 
{   
    final public String expression;
    final public int value;

    public Token(String expression, int value)
    {  
        this.expression = expression;
        this.value = value;
    }
}

每个字符串、表达式都是一个有效的条目——数字、运算符或函数。 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();

    }

还有一个类似的函数哈希表。

现在,Token 类扩展了 MathCommand - Token 可以返回其类型的函数或运算符。缺点是 Token 返回一个对象,而不是运算符或函数。运算符和函数中的方法之间的区别显然不大。

操作符有方法:

getValue(String number1, String number2);

一个函数有方法:

getValue(String number);

我能否以某种方式实现一个接口并将方法 getValue 重写为上述方法之一?

【问题讨论】:

  • 算子、加法、...是你自己的类吗?你只想实现一个接口?
  • 对不起,它们是我自己的课。运算符是加法、减法等的超类。我将在帖子中进行编辑。
  • 你考虑过使用varargs吗?

标签: java parsing math


【解决方案1】:

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

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

【讨论】:

  • 谢谢 - 我把这个和@kaykay 的评论结合起来了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-21
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多