package me.tomassetti.turin.parser.ast.expressions; import com.google.common.collect.ImmutableList; import me.tomassetti.turin.parser.ast.Node; import me.tomassetti.turin.typesystem.TypeUsage; public class MathOperation extends Expression { private Expression left; private Expression right; private Operator operator; @Override public Iterable<Node> getChildren() { return ImmutableList.of(left, right); } @Override public TypeUsage calcType() { return left.calcType(); } public Expression getLeft() { return left; } public Expression getRight() { return right; } public Operator getOperator() { return operator; } public enum Operator { MULTIPLICATION("*"), DIVISION("/"), SUM("+"), SUBTRACTION("-"); private String symbol; private Operator(String symbol) { this.symbol = symbol; } public static Operator fromSymbol(String symbol) { for (Operator operator : Operator.values()) { if (operator.symbol.equals(symbol)) { return operator; } } throw new IllegalArgumentException(symbol); } } public MathOperation(Operator operator, Expression left, Expression right) { this.operator = operator; this.left = left; this.left.setParent(this); this.right = right; this.right.setParent(this); } }