from collections import deque from icecream import ic from typing import Iterable from command_translation import translate from tokenizer import tokenize from math_objects import Token, Integer, Operator equation: str = "1+0-1/(0+2)"# input() if not equation.strip(): raise SyntaxError("Пустая строка") tokens: Iterable[Token] = tokenize(equation) sorted_tokens: Iterable[Token] = translate(tokens) token_stack: deque[Token] = deque() for token in sorted_tokens: if not isinstance(token, Operator): token_stack.append(token) continue try: b, a = token_stack.pop(), token_stack.pop() except IndexError: raise SyntaxError ic(a.value, token.value, b.value) new_integer = Integer(eval(f"{a.value}{token.value}{b.value}")) token_stack.append(new_integer) print(token_stack.pop().value)