Example #1
0
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)
Example #2
0
def SInterp_basic_eval_test():
    interp = SInterpreter()
    eq_(interp.seval('(+ 3 2)'), SNode('num', 5))
Example #3
0
def SInterp_define_test():
    interp = SInterpreter()
    interp.seval('(~define x 5)')
    eq_(interp.seval('x'), SNode('num', 5))
Example #4
0
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))