aboutsummaryrefslogtreecommitdiff
path: root/python/step0_repl.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/step0_repl.py')
-rw-r--r--python/step0_repl.py32
1 files changed, 32 insertions, 0 deletions
diff --git a/python/step0_repl.py b/python/step0_repl.py
new file mode 100644
index 0000000..8d42c33
--- /dev/null
+++ b/python/step0_repl.py
@@ -0,0 +1,32 @@
+import sys, traceback
+import mal_readline
+
+# read
+def READ(str):
+ return str
+
+# eval
+def EVAL(ast, env):
+ # try it as an expression then a statement
+ try:
+ return eval(ast)
+ except SyntaxError:
+ exec compile(ast, '', 'single') in globals()
+ return None
+
+# print
+def PRINT(exp):
+ return exp
+
+# repl
+def REP(str):
+ return PRINT(EVAL(READ(str), {}))
+
+while True:
+ try:
+ line = mal_readline.readline("user> ")
+ if line == None: break
+ if line == "": continue
+ print(REP(line))
+ except Exception as e:
+ print "".join(traceback.format_exception(sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2]))