41 lines
1021 B
Python
41 lines
1021 B
Python
|
|
|
|
def step(stack, expression, dictionary):
|
|
(program, (seq, stack)) = stack
|
|
while seq:
|
|
item, seq = seq
|
|
stack = joy((item, stack), program, dictionary)[0]
|
|
return stack, expression, dictionary
|
|
|
|
|
|
def step_jit(stack, expression, dictionary):
|
|
(program, (seq, stack)) = stack
|
|
try:
|
|
p = joyc(program)
|
|
except:
|
|
return step(stack, expression, dictionary)
|
|
while seq:
|
|
item, seq = seq
|
|
stack = p((item, stack), (), dictionary)[0]
|
|
return stack, expression, dictionary
|
|
|
|
|
|
def step_exact_semantics(stack, expression, dictionary):
|
|
(program, (seq, stack)) = stack
|
|
if seq:
|
|
item, seq = seq
|
|
stack = item, stack
|
|
expression = concat(program, (seq, (program, (expression))))
|
|
return stack, expression, dictionary
|
|
|
|
|
|
|
|
# [+] step
|
|
def fn(stack, expression, dictionary):
|
|
(s1, (i1, stack)) = stack
|
|
while s1:
|
|
(i2, s1) = s1
|
|
i3 = i2 + i1
|
|
(i1, stack) = (i3, stack)
|
|
return (i1, stack), expression, dictionary
|