996
|
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
|