Exemple #1
0
def main():
    interpreter = Interpreter()
    while True:
        try:
            buffer = get_input('eLisp> ')
        except EOFError:
            print()
            break
        lexer = Lexer(buffer)

        try:
            exprs = Parser(lexer).parse()
            if not exprs:
                continue
            expr = exprs[0]

            if is_load(expr):
                load(interpreter, expr)
                continue

            result_expr = interpreter.interpret(expr)
            if procedure.is_compound_procedure(result_expr):
                print (procedure.get_procedure_repr(result_expr))
            else:
                print (result_expr)
        except Exception as e:
            print (str(e))
            continue
Exemple #2
0
 def _apply(self, proc, args):
     if procedure.is_primitive_procedure(proc):
         return procedure.apply_primitive_procedure(proc, args)
     elif procedure.is_compound_procedure(proc):
         return self._eval_sequence(
                 procedure.procedure_body(proc), 
                 extend_environment(
                     procedure.procedure_parameters(proc), 
                     args, 
                     procedure.procedure_environment(proc)))