java解析代数表达式以查找变量
我正在设计一个表达式解析器,我很难弄清楚如何准确地解析变量
它应该能够阅读以下表达式:
(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) 个答案