def interactive(): print "PyPy Scheme interpreter" ctx = ExecutionContext() to_exec = "" cont = False while 1: if cont: ps = '.. ' else: ps = '-> ' sys.stdout.write(ps) to_exec += sys.stdin.readline() if to_exec == "\n": to_exec = "" elif check_parens(to_exec): try: if to_exec == "": print raise SchemeQuit print parse(to_exec)[0].eval(ctx).to_string() except SchemeQuit, e: break except ContinuationReturn, e: print e.result.to_string() except SchemeException, e: print "error: %s" % e
def entry_point(argv): if len(argv) == 2: code = open_file_as_stream(argv[1]).readall() try: t = parse(code) except BacktrackException: #(line, col) = e.error.get_line_column(code) #expected = " ".join(e.error.expected) print "parse error" return 1 #this should not be necessary here assert isinstance(t, list) ctx = ExecutionContext() try: for sexpr in t: try: w_retval = sexpr.eval(ctx) print w_retval.to_string() except ContinuationReturn, e: print e.result.to_string() except SchemeQuit, e: return 0 return 0
def test_evaluator(): ctx = ExecutionContext() eval_(ctx, "(define a 0)") w_obj = parse("(let () (set! a 42) a)")[0] (w_expr, new_ctx) = w_obj.eval_tr(ctx) assert ctx.get("a").to_number() == 42 assert isinstance(w_expr, W_Symbol) assert new_ctx is not ctx assert isinstance(new_ctx, ExecutionContext) (w_obj, newer_ctx) = w_expr.eval_tr(new_ctx) assert isinstance(w_obj, W_Number) assert w_obj.to_number() == 42 assert newer_ctx is None
def eval_noctx(expr): return parse(expr)[0].eval(ExecutionContext())
def eval_(ctx, expr): return parse(expr)[0].eval(ctx)
def parse_(expr): return parse(expr)[0]
def eval_(ctx, expr): try: return parse(expr)[0].eval(ctx) except ContinuationReturn, e: return e.result
def parse_sexpr(expr): return parse(expr)[0]
def __init__(self, w_obj=None): self.obj = w_obj OPERATION_MAP = {} for mod in (ssobject, syntax, procedure, macro): for obj_name in dir(mod): obj = getattr(mod, obj_name) try: issubclass(obj, ssobject.W_Callable) OPERATION_MAP[obj._symbol_name] = obj(obj._symbol_name) except (TypeError, AttributeError): pass de_file = py.magic.autopath().dirpath().join("r5rs_derived_expr.ss") de_code = de_file.read() de_expr_lst = parse(de_code) class ExecutionContext(object): """Execution context implemented as a dict. { "IDENTIFIER": Location(W_Root()) } """ def __init__(self, globalscope=None, scope=None, closure=False, cont_stack=None): if scope is None: self.scope = {} else: self.scope = scope self.closure = closure
def eval_noctx(expr): return parse(expr)[0].eval(None)