Exemplo n.º 1
0
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
Exemplo n.º 2
0
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()
Exemplo n.º 4
0
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()
Exemplo n.º 5
0
def vprint(v, e):
    val = eval(e, v)
    print to_string(val)
    return val
Exemplo n.º 6
0
def wrap(v, p):
    p = eval(p, v)
    return lambda v, *x: p(v, *[eval(expr, v) for expr in x])
Exemplo n.º 7
0
def cond(v, *x):
    for (p, e) in x:
        if eval(p, v):
            return eval(e, v)
    raise ValueError("No Branch Evaluates to True")
Exemplo n.º 8
0
def sequence(v, *x):
    val = 0
    for e in x:
        val = eval(e, v)
    return val
Exemplo n.º 9
0
def defvar(v, var, e):
    val = eval(e, v)
    v[var] = val
    return val
Exemplo n.º 10
0
def setvar(v, var, e):
    val = eval(e, v)
    v.find(var)[var] = val
    return val
Exemplo n.º 11
0

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)),
Exemplo n.º 12
0
def cond(v, *x):
    for (p, e) in x:
        if eval(p, v):
            return eval(e, v)
    raise ValueError("No Branch Evaluates to True")
Exemplo n.º 13
0
def defvar(v, var, e):
    val = eval(e, v)
    v[var] = val
    return val
Exemplo n.º 14
0

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),
    '=':
Exemplo n.º 15
0
def wrap(v, p):
    p = eval(p, v)
    return lambda v, *x: p(v, *[eval(expr, v) for expr in x])
Exemplo n.º 16
0
def vprint(v, e):
    val = eval(e, v)
    print to_string(val)
    return val
Exemplo n.º 17
0
def sequence(v, *x):
    val = 0
    for e in x:
        val = eval(e, v)
    return val
Exemplo n.º 18
0
 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)
Exemplo n.º 19
0
 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)
Exemplo n.º 20
0
	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),
Exemplo n.º 21
0
def setvar(v, var, e):
    val = eval(e, v)
    v.find(var)[var] = val
    return val