Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 解析代数表达式以查找变量_Java_Parsing_Tree_Expression - Fatal编程技术网

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

Java 解析代数表达式以查找变量,java,parsing,tree,expression,Java,Parsing,Tree,Expression,我正在设计一个表达式解析器,但我很难弄清楚如何准确地解析变量 它应该能够读取以下表达式: (x+2)*(x+3) 2*x^2 x^y 我已经写了一些东西将这些表达式转换成树结构,但我不确定如何识别变量 我想解决这个问题的一种方法是在树中搜索,找到一个角色,然后构建一个可变对象。 要检查指数,我将转到变量的父节点并检查它是否为^ 对于系数,我将检查该节点的父节点的* 还有比这更有效的方法吗?我不确定我会怎么做 x^(2y+1) 下面是我编写的一个实现,它检查右节点是否是一个变量,并设置它的系数和指

我正在设计一个表达式解析器,但我很难弄清楚如何准确地解析变量

它应该能够读取以下表达式:

(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()));
    }

看起来是个不错的尝试。它对你有用吗?不是真的,只有当变量像“x”一样单独存在时。“x^2”不起作用。我想知道是否有更好的方式来做我想做的事情,这种方式对我来说太混乱了