java 表达式树_java-从抽象语法树生成前缀表达式

我使用的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的表达式,因此我在内存和性能方面都遇到了问题.因此,我想使用堆栈来优化此过程.有人可以给我提示吗?谢谢.

========================

编辑:表达式是复杂分析的结果,我只是得到要处理的结果,并且不能从一开始就构建结果.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值