Question: Starting with the BinaryExpression learning activity solution from this week, Code a new class PostfixVisitor that visits an expression tree and returns the expression in
Starting with the BinaryExpression learning activity solution from this week, Code a new class PostfixVisitor that visits an expression tree and returns the expression in postfix notation, with each part of the expression separated by spaces. For example, if the tree represented the expression 3 + 5, then the postfix result would be "3 5 +"
AddExpression.java
public class AddExpression extends BinaryExpression
{
public AddExpression(Expression left, Expression right)
{
super(left, right);
}
@Override
public Operation getOperation()
{
return Operation.ADD;
}
}
BinaryExpression.java
public abstract class BinaryExpression extends Expression
{
Expression leftChild;
Expression rightChild;
public BinaryExpression(Expression left, Expression right) {
leftChild = left;
rightChild = right;
}
@Override
public void accept(Visitor visitor)
{
visitor.preVisit(this);
leftChild.accept(visitor);
visitor.visit(this);
rightChild.accept(visitor);
visitor.postVisit(this);
}
public abstract Operation getOperation();
}
ConstantExpression.java
public class ConstantExpression extends Expression
{
Integer value;
public ConstantExpression(Integer value) {
this.value = value;
}
public Integer getValue() {
return value;
}
@Override
public void accept(Visitor visitor)
{
visitor.visit(this);
}
}
DivideExpression.java
public class DivideExpression extends BinaryExpression
{
public DivideExpression(Expression left, Expression right)
{
super(left, right);
}
@Override
public Operation getOperation()
{
return Operation.DIVIDE;
}
}
Expression.java
public abstract class Expression implements Visitable
{
}
MultiplyExpression.java
public class MultiplyExpression extends BinaryExpression
{
public MultiplyExpression(Expression left, Expression right)
{
super(left, right);
}
@Override
public Operation getOperation()
{
return Operation.MULTIPLY;
}
}
Operation.java
public abstract class Operation
{
private String value;
private Operation(String str)
{
this.value = str;
}
public abstract Integer apply(Integer left, Integer right);
public String toString()
{
return this.value;
}
public static final Operation ADD = new Operation("+") {
@Override
public Integer apply(Integer left, Integer right)
{
return left.intValue() + right.intValue();
}
};
public static final Operation SUBTRACT = new Operation("-") {
@Override
public Integer apply(Integer left, Integer right)
{
return left.intValue() - right.intValue();
}
};
public static final Operation MULTIPLY = new Operation("*") {
@Override
public Integer apply(Integer left, Integer right)
{
return left.intValue() * right.intValue();
}
};
public static final Operation DIVIDE = new Operation("/") {
@Override
public Integer apply(Integer left, Integer right)
{
return left.intValue() / right.intValue();
}
};
}
PostfixVisitor.java
import java.util.*;
public class PostfixVisitor implements Visitor {
public PostfixVisitor() {
}
public String getResult() {
return null;
}
@Override
public void preVisit(BinaryExpression expr) {
}
@Override
public void visit(BinaryExpression expr) {
}
@Override
public void postVisit(BinaryExpression expr) {
}
@Override
public void visit(ConstantExpression expr) {
}
}
SubtractExpression.java
public class SubtractExpression extends BinaryExpression
{
public SubtractExpression(Expression left, Expression right)
{
super(left, right);
}
@Override
public Operation getOperation()
{
return Operation.SUBTRACT;
}
}
Visitable.java
public interface Visitable
{
void accept(Visitor visitor);
}
Visitor.java
public interface Visitor
{
public void preVisit(BinaryExpression expr);
public void visit(BinaryExpression expr);
public void postVisit(BinaryExpression expr);
public void visit(ConstantExpression expr);
}
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
