コード例 #1
0
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
コード例 #2
0
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
コード例 #3
0
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
コード例 #4
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
コード例 #5
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
コード例 #6
0
def eval_noctx(expr):
    return parse(expr)[0].eval(ExecutionContext())
コード例 #7
0
def eval_(ctx, expr):
    return parse(expr)[0].eval(ctx)
コード例 #8
0
def parse_(expr):
    return parse(expr)[0]
コード例 #9
0
def eval_(ctx, expr):
    try:
        return parse(expr)[0].eval(ctx)
    except ContinuationReturn, e:
        return e.result
コード例 #10
0
def parse_sexpr(expr):
    return parse(expr)[0]
コード例 #11
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
コード例 #12
0
ファイル: test_macro.py プロジェクト: griels/pypy-sc
def eval_(ctx, expr):
    return parse(expr)[0].eval(ctx)
コード例 #13
0
ファイル: test_macro.py プロジェクト: griels/pypy-sc
def parse_(expr):
    return parse(expr)[0]
コード例 #14
0
ファイル: test_macro.py プロジェクト: griels/pypy-sc
def eval_noctx(expr):
    return parse(expr)[0].eval(ExecutionContext())
コード例 #15
0
ファイル: test_eval.py プロジェクト: TheDunn/flex-pypy
def eval_noctx(expr):
    return parse(expr)[0].eval(None)
コード例 #16
0
def eval_(ctx, expr):
    try:
        return parse(expr)[0].eval(ctx)
    except ContinuationReturn, e:
        return e.result