我正在设计一个表达式解析器,我无法弄清楚如何解析变量。
它应该能够读取诸如
之类的表达式(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()));
}