def main(): """Run the REPL.""" interp = SInterpreter() while True: try: line = input('>>> ') while line.count('(') > line.count(')'): line += ' ' + input('... ' + ' ' * 2 * (line.count('(') - line.count(')'))) if line.count('(') < line.count(')'): raise Exception("Too many closing parentheses.") sprint(interp.seval(line)) except EOFError: print('Bye') return except SException as e: print('Error:', e)
def SInterp_basic_eval_test(): interp = SInterpreter() eq_(interp.seval('(+ 3 2)'), SNode('num', 5))
def SInterp_define_test(): interp = SInterpreter() interp.seval('(~define x 5)') eq_(interp.seval('x'), SNode('num', 5))
def SInterp_recursive_test(): interp = SInterpreter() interp.seval('(~define f (~lambda (y) (~if (= y 0) 0 (f (- y 1)))))') eq_(interp.seval('(f 2)'), SNode('num', 0))