我使用的Java库是:给定一个中缀表达式(1 3)4,它可以按以下方式构建AST:
BinaryIntegerExpression
/ | \
IntegerExpression op IntegerExpression
| | |
BinaryIntegerExpression + IntegerConstant
/ | \ |
IntegerExpression op IntegerExpression 4
| | |
IntegerConstant + IntegerConstant
| |
1 3
基本上,BinaryIntegerExpression和IntegerConstant是IntegerExpression的子类.
该库有一个抽象类Visitor,它允许您重写preVisit和postVisit遍历树.除此以外,我无法触摸任何东西.
这是我的尝试.我尝试使用一个简单的递归来生成前缀表达式.对于小例子,它可以正常工作.
public void preVisit(BinaryIntegerExpression expr) {
if(stop == true)
return;
PrefixVisitor left = new PrefixVisitor();
left.preVisit(expr.getLeft());
PrefixVisitor right = new PrefixVisitor();
right.preVisit(expr.getRight());
str = "( " + expr.getOp().toString() + " " + left.getExpression() + " " + right.getExpression() + " )";
stop = true;
}
public void preVisit(IntegerConstant expr) {
if(stop == true)
return;
str = " " + expr.toString() + " ";
}
但是,我必须处理大小超过100MB的表达式,因此我在内存和性能方面都遇到了问题.因此,我想使用堆栈来优化此过程.有人可以给我提示吗?谢谢.
========================
编辑:表达式是复杂分析的结果,我只是得到要处理的结果,并且不能从一开始就构建结果.