1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| class Evaluator: def __init__(self,primitives): self._exp_parser = ExpressionParser() self._primitives = primitives def eval(self,exp,env): if exp == []: return
if isinstance(exp,Expression) == False: exp = self._exp_parser.parse(exp,env) return exp.eval(self,env) def apply(self,proc,args): if isinstance(proc,ProcedureExpression): proc.env = Environment.extend_environment(dict(zip(proc.args, args)),proc.env) return proc.eval(self,proc.env) return proc(*args)
def init_primitives(): global_env.get_frame().set_variables(primitives)
def run_evaluator(): run_evaluator()
if __name__ == '__main__': global_env = Environment() exp_formattor = ExpressionFormattor() primitives = { "+": add, "-": subtract, "*": multiply, "/": divide, "=": equal, "list": to_list, "cons": cons, "car": car, "cdr": cdr, "null?": null} init_primitives() evaluator = Evaluator(primitives) run_evaluator()
|