Mercurial > repo
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 |