view interps/lambda/lambda.py @ 2034:cfec38aa6769

<elliott> echo "#!/bin/sh" >bin/list; echo \'cd /var/irclogs/_esoteric; name=$(cat $(ls ????-??-??.txt | tail -1) | tail -1 | sed "s/[^<]*<//; s/>.*//"); sed -i "s/.\\$nam[e]./$name \\&" bin/list; echo "$name"\' >>bin/list
author HackBot
date Thu, 07 Feb 2013 21:40:16 +0000
parents 859f9b4339e6
children
line wrap: on
line source

#!/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)