package edu.stanford.rsl.conrad.numerics.mathexpressions; import java.util.Map; /** * Class to model Mathematical Expressions consisting of 2 or more expressions. * @author Rotimi X Ojo */ public class CompoundExpression extends AbstractMathExpression{ private char operator; private AbstractMathExpression rightExp; private AbstractMathExpression leftExp; public CompoundExpression( AbstractMathExpression leftExp, AbstractMathExpression rightExp,char operator){ this.rightExp = rightExp; this.leftExp = leftExp; this.operator = operator; } @Override public String toString(){ return leftExp.toString() + " " + operator + " "+ rightExp.toString(); } @Override public double evaluate(Map<String,Double> varTable){ if (operator == '=') { double val = rightExp.evaluate(varTable); varTable.put(leftExp.toString(), val); return val; } double leftval = leftExp.evaluate(varTable); double rightval = rightExp.evaluate(varTable); switch (operator) { case '+':return leftval + rightval; case '-':return leftval - rightval; case '*':return leftval * rightval; case '/':return leftval / rightval; default: throw new UnsupportedOperationException("Invalid Operator"); } } } /* * Copyright (C) 2010-2014 Rotimi X Ojo * CONRAD is developed as an Open Source project under the GNU General Public License (GPL). */