Mercurial > repo
diff interps/lambda/lambda.py @ 996:859f9b4339e6
<Gregor> tar xf egobot.tar.xz
author | HackBot |
---|---|
date | Sun, 09 Dec 2012 19:30:08 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/interps/lambda/lambda.py Sun Dec 09 19:30:08 2012 +0000 @@ -0,0 +1,50 @@ +#!/usr/bin/python + +import parser, tokenizer, evaluator + +import sys, pickle +sys.setrecursionlimit(65535) # not too big, but hopefully big enough for some stuff + + +try: + line = raw_input() +except EOFError: + raise SystemExit + +# tokenize +try: + tokens = tokenizer.tokenize(line) +except Exception, line: + print "Tokenizer error:", line + raise SystemExit + +# Get a pickled environment +try: + env = pickle.load(open('lambda/defs.pickle')) +except: + env = {} + +# parse +try: + exp, defs = parser.parse(tokens, env) +except Exception, line: + print "Parser error:", line + raise SystemExit + +env.update(defs) + +# evaluate + +try: + if exp != None: + evaluator.eval(exp, env) +except Exception, line: + print "Run-time error:", line + raise SystemExit + +# finally, save the definitions + +f = open('lambda/defs.pickle', 'w') +pickle.dump(env, f) + +