from typing import Union from Operators import Operator Term: type = float Token: type = Union[Operator, Term] class OperatorExpression: def __init__(self, operator: Operator, left, right): self.operator = operator self.left = left self.right = right def __repr__(self): return f"({self.left} {self.operator} {self.right})" def __call__(self) -> Term: return self.operator(self.left(), self.right()) class TermExpression: def __init__(self, value: Term): self.value = value def __repr__(self): return str(self.value) def __call__(self) -> Term: return self.value Expression: type = Union[OperatorExpression, TermExpression]