feat: add task 2 calculator draft
This commit is contained in:
24
task2/command_translation.py
Normal file
24
task2/command_translation.py
Normal 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
|
||||
Reference in New Issue
Block a user