解析代数表达式以查找变量

时间:2014-02-27 00:48:18

标签: java parsing tree expression

我正在设计一个表达式解析器,我无法弄清楚如何解析变量。

它应该能够读取诸如

之类的表达式

(x + 2)*(x +3)

2 * x ^ 2

x ^ y

我已经写过将这些表达式转换为树结构的东西,但我不确定如何识别变量

我想到解决它的一种方法是搜索树,找到一个字符,然后构建一个变量对象。 为了检查指数,我将转到变量的父节点并检查它是否为^ 对于系数,我会检查节点的父节点是否为*

有比这更有效的方法吗?我不确定如何做像

这样的表达

x ^(2y + 1)

这是我写的一个实现,它检查右边节点是否是变量并设置它的系数和指数。

        if(n.hasRight())
    {
        if(Character.isLetter(n.getRight().toString().charAt(0)))
        {

            Token o = TokenMap.getMap().get(n.toString());
            if(o instanceof Exponent)
            {
                expon = Double.parseDouble(n.getLeft().toString());

                Node par = n.getParent();
                Token t = TokenMap.getTok(par.toString());
                if(t instanceof Multiply)
                {
                       Token tl = TokenMap.getTok(par.getLeft().toString());
                       if(tl instanceof Exponent)
                       {
                            coeff = Double.parseDouble(par.getRight().toString());           
                       }
                        else
                       {
                           coeff = Double.parseDouble(par.getLeft().toString());
                       }

                }
            }
            Variable v = new Variable(n.getRight().toString().charAt(0),expon,coeff);
        } parseVar(new ExpressionTree(n.getRight()));
    }

0 个答案:

没有答案