In this post we are defining variables and using them:
class Interpreter:
    # Modified constructor: scope is list of dicts
    # First dict holds global variables, 
    # Last dict holds called function's scope variables
    def __init__(self):
        self.scope=[{}]
    # ....(previous code).... 
    # When we call Set we always create or update variable
    # in last scope: 
    def Set(self,xs):
        _, key, val = xs
        self.scope[-1][key] = self.eval(val)
    # When we call Get we first look into last scope(function scope),
    # if variable is not found then we look into first scope(globals)    
    def Get(self,xs):
        _, var = xs
        if var in self.scope[-1]:
            return self.scope[-1][var]
        elif var in self.scope[0]:
            return self.scope[0][var]
        raise Exception("error: variable not found: "+var)
code=[
    ["Set","answer",  ["Mul",6, 7],  ],
    ["Print", "Answer is: ", ["Get", "answer"] ]
]
interpreter=Interpreter()
interpreter.run(code)
Output:
Answer is: 42
    
Top comments (0)