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)
+
+