feat: add task 2 calculator draft

This commit is contained in:
2026-04-09 17:28:40 +06:00
parent 67e25b3f72
commit 3ac1c8b2a1
6 changed files with 222 additions and 1 deletions

View File

@@ -0,0 +1,24 @@
from collections import deque
from typing import Iterable
from icecream import ic
from math_objects import Operator, Token
def translate(tokens: Iterable[Token]) -> Iterable[Token]:
operator_stack: deque[Operator] = deque()
previous_precedence = 0
for token in tokens:
if not isinstance(token, Operator):
yield token
continue
if token.precedence <= previous_precedence:
for item in reversed(operator_stack):
yield item
operator_stack.clear()
previous_precedence = token.precedence
operator_stack.append(token)
ic(len(operator_stack))
if operator_stack:
for item in reversed(operator_stack):
yield item