예제 #1
0
파일: secd.py 프로젝트: apg/abstractina
 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
예제 #2
0
파일: testcons.py 프로젝트: apg/abstractina
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)
예제 #3
0
파일: test.py 프로젝트: apg/abstractina
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())