def static_eval(txt): stream, result, parse = sexp_parser.SExpGrammer().parse(txt) if not result or stream.position != len(txt): print " " * (stream.position + 2) + "^" print "Parse error at position: %i" % stream.position return try: module = sexp_to_cps.convert_parse_to_cps(parse, False) except Exception as e: print "Could not interpret syntax: " + str(e) return try: prog = expression_tree.Prog(module) instrs, jumps = prog.compile() except Exception as e: print "Compile error: " + str(e) return try: print "Program output: " + str(vm.run_program(instrs, jumps)) except vm.RuntimeException as e: print "Runtime error: " + str(e) return
def convert_def(parse, module): new_module = copy(module) main_already_present = "main" in new_module new_module.update(sexp_to_cps.convert_parse_to_cps(parse)) if "main" in new_module and not main_already_present: new_module[INTERACTIVE_MAIN] = expression_tree.Func(["ret"], expression_tree.Call("main", [expression_tree.Finish()])) return new_module
def convert_def(parse, module): new_module = copy(module) main_already_present = "main" in new_module new_module.update(sexp_to_cps.convert_parse_to_cps(parse)) if "main" in new_module and not main_already_present: new_module[INTERACTIVE_MAIN] = expression_tree.Func( ["ret"], expression_tree.Call("main", [expression_tree.Finish()])) return new_module