def entry_point(argv): path = argv[0] if len(argv) == 1 else argv[-1] try: f = open_file_as_stream(path, buffering=0) except OSError as exc: os.write(2, "%s -- %s (LoadError)\n" % (os.strerror(exc.errno), path)) return 1 try: code = f.readall() finally: f.close() try: t = parse(code) except BacktrackException as exc: (line, col) = exc.error.get_line_column(code) # expected = ' '.join(exc.error.expected) os.write(2, "parse error in line %d, column %d" % (line, col)) return 1 ctx = ExecutionContext() try: for sexpr in t: try: print(sexpr.eval(ctx).to_string()) except ContinuationReturn as exc: print(exc.result.to_string()) except SchemeQuit: return 0 else: return 0
def main(): print "PyPy Scheme interpreter" ctx = ExecutionContext() to_exec = "" cont = False while True: if cont: ps = ".. " else: ps = "-> " sys.stdout.write(ps) to_exec += sys.stdin.readline() if to_exec == "\n": to_exec = "" elif _check_parens(to_exec): try: if to_exec == "": print ("") raise SchemeQuit print (parse(to_exec)[0].eval(ctx).to_repr()) except SchemeQuit: break except ContinuationReturn as exc: print (exc.result.to_string()) except SchemeException as exc: print ("error: %s" % exc) except BacktrackException as exc: (line, col) = exc.error.get_line_column(to_exec) expected = " ".join(exc.error.expected) print ("parse error: in line %s, column %s expected: %s" % (line, col, expected)) to_exec = "" cont = False else: cont = True