comparison 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
comparison
equal deleted inserted replaced
995:6883f5911eb7 996:859f9b4339e6
1 #!/usr/bin/python
2
3 import parser, tokenizer, evaluator
4
5 import sys, pickle
6 sys.setrecursionlimit(65535) # not too big, but hopefully big enough for some stuff
7
8
9 try:
10 line = raw_input()
11 except EOFError:
12 raise SystemExit
13
14 # tokenize
15 try:
16 tokens = tokenizer.tokenize(line)
17 except Exception, line:
18 print "Tokenizer error:", line
19 raise SystemExit
20
21 # Get a pickled environment
22 try:
23 env = pickle.load(open('lambda/defs.pickle'))
24 except:
25 env = {}
26
27 # parse
28 try:
29 exp, defs = parser.parse(tokens, env)
30 except Exception, line:
31 print "Parser error:", line
32 raise SystemExit
33
34 env.update(defs)
35
36 # evaluate
37
38 try:
39 if exp != None:
40 evaluator.eval(exp, env)
41 except Exception, line:
42 print "Run-time error:", line
43 raise SystemExit
44
45 # finally, save the definitions
46
47 f = open('lambda/defs.pickle', 'w')
48 pickle.dump(env, f)
49
50