def load(filename): print "Loading and executing %s" % filename rps = 0 full_line = "" line_num = 1 for line in open(filename, "r"): line = line.strip() full_line += line rps += line.count("(")-line.count(")") if rps == 0 and full_line.strip() != "": try: tokens = tokenize(full_line) while len(tokens) > 0: tree = parse(tokens) if tree is not None: eval(tree,global_env) except SystemExit: exit() except Exception as e: print "\nAn error occurred on line %d:\n\t%s\n" % (line_num,full_line) print e.message #traceback.print_exc() break full_line = "" line_num += 1
def load(filename): print "Loading and executing %s" % filename rps = 0 full_line = "" line_num = 1 for line in open(filename, "r"): line = line.strip() full_line += line rps += line.count("(") - line.count(")") if rps == 0 and full_line.strip() != "": try: tokens = tokenize(full_line) while len(tokens) > 0: tree = parse(tokens) if tree is not None: eval(tree, global_env) except SystemExit: exit() except Exception as e: print "\nAn error occurred on line %d:\n\t%s\n" % (line_num, full_line) print e.message #traceback.print_exc() break full_line = "" line_num += 1
def repl(prompt='vau> '): try: while True: full_line = raw_input(prompt) rps = full_line.count("(")-full_line.count(")") while rps != 0 or full_line == "": line = raw_input(">\t") full_line += line rps += line.count("(")-line.count(")") try: tokens = tokenize(full_line) while len(tokens) > 0: val = eval(parse(tokens),global_env) if val is not None: print to_string(val) except ValueError as e: print e.message except (KeyboardInterrupt, SystemExit): pass except: print "\nFatal Error\n" traceback.print_exc()
def repl(prompt='vau> '): try: while True: full_line = raw_input(prompt) rps = full_line.count("(") - full_line.count(")") while rps != 0 or full_line == "": line = raw_input(">\t") full_line += line rps += line.count("(") - line.count(")") try: tokens = tokenize(full_line) while len(tokens) > 0: tree = parse(tokens) if tree is not None: val = eval(tree, global_env) if val is not None: print to_string(val) except ValueError as e: print e.message except (KeyboardInterrupt, SystemExit): pass except: print "\nFatal Error\n" traceback.print_exc()
def vprint(v, e): val = eval(e, v) print to_string(val) return val
def wrap(v, p): p = eval(p, v) return lambda v, *x: p(v, *[eval(expr, v) for expr in x])
def cond(v, *x): for (p, e) in x: if eval(p, v): return eval(e, v) raise ValueError("No Branch Evaluates to True")
def sequence(v, *x): val = 0 for e in x: val = eval(e, v) return val
def defvar(v, var, e): val = eval(e, v) v[var] = val return val
def setvar(v, var, e): val = eval(e, v) v.find(var)[var] = val return val
def vprint(v, e): val = eval(e, v) print to_string(val) return val def wrap(v, p): p = eval(p, v) return lambda v, *x: p(v, *[eval(expr, v) for expr in x]) basic_env = Env( { "+": lambda v, x, y: eval(x, v) + eval(y, v), "-": lambda v, x, y: eval(x, v) - eval(y, v), "*": lambda v, x, y: eval(x, v) * eval(y, v), "/": lambda v, x, y: eval(x, v) / eval(y, v), ">": lambda v, x, y: eval(x, v) > eval(y, v), "<": lambda v, x, y: eval(x, v) < eval(y, v), ">=": lambda v, x, y: eval(x, v) >= eval(y, v), "<=": lambda v, x, y: eval(x, v) <= eval(y, v), "=": lambda v, x, y: eval(x, v) == eval(y, v), "eq?": lambda v, x, y: (lambda vx, vy: (not isa(vx, list)) and (vx == vy))(eval(x, v), eval(y, v)), "cons": lambda v, x, y: [eval(x, v)] + eval(y, v), "car": lambda v, x: eval(x, v)[0], "cdr": lambda v, x: eval(x, v)[1:], "list": lambda v, *x: [eval(expr, v) for expr in x], "append": lambda v, x, y: eval(x, v) + eval(y, v), "len": lambda v, x: len(eval(x, v)),
def vprint(v, e): val = eval(e, v) print to_string(val) return val def wrap(v, p): p = eval(p, v) return lambda v, *x: p(v, *[eval(expr, v) for expr in x]) basic_env = Env({ '+': lambda v, x, y: eval(x, v) + eval(y, v), '-': lambda v, x, y: eval(x, v) - eval(y, v), '*': lambda v, x, y: eval(x, v) * eval(y, v), '/': lambda v, x, y: eval(x, v) / eval(y, v), '>': lambda v, x, y: eval(x, v) > eval(y, v), '<': lambda v, x, y: eval(x, v) < eval(y, v), '>=': lambda v, x, y: eval(x, v) >= eval(y, v), '<=': lambda v, x, y: eval(x, v) <= eval(y, v), '=':
def __call__(self, call_env, *args): new_env = Env(zip(self.vars, args), self.clos_env) new_env[self.sym] = call_env if not 'self' in args: new_env['self'] = self #safe recursion return eval(self.body, new_env)
def __call__(self, call_env, *args): new_env = Env(zip(self.vars, args), self.clos_env) new_env[self.sym] = call_env if not "self" in args: new_env["self"] = self # safe recursion return eval(self.body, new_env)
val = 0 for e in x: val = eval(e, v) return val def vprint(v,e): val = eval(e, v) print to_string(val) return val def wrap(v,p): p = eval(p,v) return lambda v,*x: p(v,*[eval(expr,v) for expr in x]) basic_env = Env({ '+': lambda v,x,y:eval(x,v)+eval(y,v), '-': lambda v,x,y:eval(x,v)-eval(y,v), '*': lambda v,x,y:eval(x,v)*eval(y,v), '/': lambda v,x,y:eval(x,v)/eval(y,v), '>': lambda v,x,y:eval(x,v)>eval(y,v), '<': lambda v,x,y:eval(x,v)<eval(y,v), '>=': lambda v,x,y:eval(x,v)>=eval(y,v), '<=': lambda v,x,y:eval(x,v)<=eval(y,v), '=': lambda v,x,y:eval(x,v)==eval(y,v), 'eq?': lambda v,x,y: (lambda vx,vy: (not isa(vx, list)) and (vx == vy))(eval(x,v),eval(y,v)), 'cons': lambda v,x,y:[eval(x,v)]+eval(y,v), 'car': lambda v,x:eval(x,v)[0], 'cdr': lambda v,x:eval(x,v)[1:], 'list': lambda v,*x:[eval(expr, v) for expr in x], 'append': lambda v,x,y:eval(x,v)+eval(y,v),