In: Computer Science
I need to write an interpreter for arithmetic expressions in Python. This program receives an input string with an arithmetic expression and does:
1. prints a ">>>" as if it was a terminal
2. lets us allocate a variable to a a numeric value (as "a = 3") then it stores {'a':3} to a dictionary memory
3. whenever it receives an expression or input, transform it to postfix notation and print it (even when allocating variables)
4. it is able to operate with alerady allocated variables (so if i did put a = 2, then I can create expressions with A that will have a real value)
5. Stores and evaluates postfix notation expression in stacks
6. Is able to operate with the operands:
a. "(" ")" parethesis
b. unary + and unary -
c. exponentiation
d. multplication and division
e. binary sum and binary subtraction
when I type (__quit__) quits the program.
7. the program must be able to let me allocate variables to more than one digit strings (as 'yee') and operate with more than one digit numbers.
top = -1
array = []
output = []
precedence = {'+': 1, '-': 1, '*': 2, '/': 2, '^': 3}
alpha_value = {}
def push(op):
    global top
    top += 1
    array.append(op)
def pop():
    global top
    if top != -1:
        top -= 1
        return array.pop()
    else:
        return "$"
def checkHigher(ch):
    result = False
    if ch in precedence and array[-1] in precedence:
        if precedence[ch] <= precedence[array[-1]]:
            result = True
    return result
while True:
    input_str = input(">>")
    if input_str == "(__quit__)":
        break
    if "=" in input_str:
        a_v = input_str.split("=")
        alpha_value[a_v[0]] = a_v[1]
    else:
        for ch in input_str:
            if ch.isalpha():
                output.append(ch)
            elif ch == "(":
                push(ch)
            elif ch == ")":
                while top != -1 and array[-1] != "(":
                    output.append(pop())
                if top != -1 and array[-1] != "(":
                    break
                else:
                    pop()
            else:
                while top != -1 and checkHigher(ch):
                    output.append(pop())
                push(ch)
        while top != -1:
            output.append(pop())
        last = []
        for i in output:
            if i in alpha_value:
                last.append(alpha_value[i])
            else:
                last.append(i)
        print("".join(last))