def dump_state(self, state): print 'S: ', state.S print 'E: ', state.E print 'C: ', state.C print 'C exp: ', cons2str(state.C) print 'D: ', state.D
from abstractina.read import read from abstractina.data import cons2str from abstractina.machines.secd import * program = """ ;; cons two numbers together ((ldc 1) (ldc 2) (cons)) ;;; should get (2 . 1) """ code = read(program) machine = SECDMachine() state = SECDState(TypedStack(), Environment(), code, Stack()) final = machine.run(state, step=True) val, _ = final.S.pop('value') print cons2str(val) # # "(cons 1 2)" -> # (ldc 2) (ldc 1) (cons)
from abstractina.backends.secd import SECDBackend from abstractina.machines.secd import SECDMachine from abstractina.data import cons2str, Cons, List from abstractina.ast import * from abstractina.environment import NameLookupEnvironment compiler = SECDBackend() s = AddOp(Const(1), Const(2)) c = compiler.compile(s) print "Running", cons2str(c) machine = SECDMachine() result = machine.go(c) val, _ = result.S.pop() print "RESULT (expecting 3): ", val assert val == 3 print s = If(EqOp(Const(1), Const(2)), Const(1), Const(2)) c = compiler.compile(s, NameLookupEnvironment()) print "Running", cons2str(c) result = machine.go(c) val, _ = result.S.pop() print "RESULT (expecting 2): ", val assert val == 2 print s = Apply(Lambda(["x", "y"], AddOp(Var("x"), Var("y"))), [Const(5), Const(6)]) c = compiler.compile(s, env=NameLookupEnvironment())