def main():
parser = argparse.ArgumentParser(description="The interpreter for Pluto")
parser.add_argument("-f", "--file", action="store", dest="file", type=str, help="the file to execute")
parser.add_argument("-p", "--parse", action="store_true", default=False, help="just parse the file - don't execute it")
parser.add_argument("-t", "--tree", action="store_true", default=False, help="print the parse tree")
parser.add_argument("-i", "--interactive", action="store_true", default=False, help="enter interactive mode after the file has been run")
parser.add_argument("-n", "--no-prelude", action="store_true", dest="no_prelude", help="don't load the prelude")
parser.add_argument("-v", "--version", action="version", version="Pluto, early beta version")
args = parser.parse_args()
if args.file == None:
ctx = c.Context()
if not args.no_prelude:
import_prelude(ctx)
repl(ctx)
else:
try:
text = open(args.file).read()
if args.parse or args.tree:
tokens = l.lex(text)
parse = p.Parser(tokens)
program = parse.parse_program()
if len(parse.errors) > 0:
parse.print_errors()
elif args.tree:
print(program)
return
ctx = c.Context()
if not args.no_prelude:
import_prelude(ctx)
execute(text, False, ctx)
if args.interactive:
print()
repl(ctx)
except FileNotFoundError:
print("File not found: %s" % args.file)
return
评论列表
文章目录