33 lines
862 B
Python
33 lines
862 B
Python
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)
|