view interps/lambda/lambda.py @ 1599:d4535cf1d640

<c00kiemon5ter> printf \'%s\\n\' \'#!/bin/sh\' \'ls -r /var/irclogs/_esoteric/????-??-??.txt | while read -r file; do awk -vs="^..:..:..: <$1>" \'\\\'\'$0 ~ s{x=$0} END{if(!x) exit 1; print x}\'\\\'\' "$file" && break; done\' >bin/seen
author HackBot
date Tue, 22 Jan 2013 01:01:10 +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)