package de.gaalop.tba.cfgImport.optimization;
import de.gaalop.dfg.BinaryOperation;
import de.gaalop.dfg.Expression;
import de.gaalop.dfg.UnaryOperation;
import de.gaalop.visitors.ReplaceVisitor;
/**
* Expression visitor for replacing certain expressions
* @author Christian Steinmetz
*/
public class ExpressionReplacer extends ReplaceVisitor {
private final Expression toReplace;
private final Expression replacement;
public ExpressionReplacer(Expression toReplace, Expression replacement) {
this.toReplace = toReplace;
this.replacement = replacement;
}
@Override
public Expression replace(Expression expression) {
if (expression == toReplace)
return replacement;
else
return super.replace(expression);
}
@Override
protected void visitBinaryOperation(BinaryOperation node) {
if (node == toReplace) {
result = replacement;
return;
}
if (node.getLeft() == toReplace) {
node.setLeft(replacement);
}
if (node.getRight() == toReplace) {
node.setRight(replacement);
}
super.visitBinaryOperation(node);
}
@Override
protected void visitUnaryOperation(UnaryOperation node) {
if (node == toReplace) {
result = replacement;
return;
}
if (node.getOperand() == toReplace) {
node.setOperand(replacement);
}
super.visitUnaryOperation(node);
}
@Override
protected void visitTerminal(Expression node) {
if (node == toReplace) {
result = replacement;
}
}
}