def __init__(self, value: Token): super().__init__([]) self.value: Token = value self.type: Type = None if value.type == "INT": self.type = IntType() elif value.type == "BOOLEAN": self.type = BooleanType() else: assert False
def less_then_equals_operation(self, expression: LessThenEqualsOperation): self.__default__(expression) if expression.left_expression.type != IntType() or expression.right_expression.type != IntType(): raise BadOperandException("<=", expression.left_expression.type, expression.right_expression.type) expression.type = BooleanType()
def unequality_operation(self, expression: UnequalityOperation): self.__default__(expression) if expression.left_expression.type != expression.right_expression.type: raise BadOperandException("!=", expression.left_expression.type, expression.right_expression.type) expression.type = BooleanType()
def and_operation(self, expression: AndOperation): self.__default__(expression) if expression.left_expression.type != BooleanType() or expression.right_expression.type != BooleanType(): raise BadOperandException("&&", expression.left_expression.type, expression.right_expression.type) expression.type = BooleanType()
def unary_not_operation(self, expression: UnaryNotOperation): if expression.expression.type != BooleanType(): raise BadOperandException("!", expression.expression.type) expression.type = BooleanType()
def greater_then_operation(self, expression: GreaterThenOperation): self.__default__(expression) if expression.left_expression.type != IntType() or expression.right_expression.type != IntType(): raise BadOperandException(">", expression.left_expression.type, expression.right_expression.type) expression.type = BooleanType()