Java 解析代数表达式以查找变量
我正在设计一个表达式解析器,但我很难弄清楚如何准确地解析变量 它应该能够读取以下表达式: (x+2)*(x+3) 2*x^2 x^y 我已经写了一些东西将这些表达式转换成树结构,但我不确定如何识别变量 我想解决这个问题的一种方法是在树中搜索,找到一个角色,然后构建一个可变对象。 要检查指数,我将转到变量的父节点并检查它是否为^ 对于系数,我将检查该节点的父节点的* 还有比这更有效的方法吗?我不确定我会怎么做 x^(2y+1) 下面是我编写的一个实现,它检查右节点是否是一个变量,并设置它的系数和指数Java 解析代数表达式以查找变量,java,parsing,tree,expression,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()));
}
看起来是个不错的尝试。它对你有用吗?不是真的,只有当变量像“x”一样单独存在时。“x^2”不起作用。我想知道是否有更好的方式来做我想做的事情,这种方式对我来说太混乱了