package abstractSyntaxTree.Expression; import TypeCheck.TypeCheckResult; import TypeCheck.TypeCheckHelper; import TypeCheck.AbstractType; import java.util.Objects; public class BinaryExpression extends AbstractType implements IExpression{ public String operator; public IExpression left; public IExpression right; @Override public TypeCheckResult typeCheck() throws Exception { TypeCheckHelper helper = new TypeCheckHelper(); TypeCheckResult result = new TypeCheckResult(); TypeCheckResult leftType = left.typeCheck(); TypeCheckResult rightType = right.typeCheck(); switch (operator) { case "and": case "or" :{ if (Objects.equals(helper.upperBound(leftType.type, rightType.type), "bool")){ result.valid = true; result.type = "bool"; } break; } // ==, != } setTypeCheckResult(result); // writes to attribute in abstract type class return result; } }