summaryrefslogtreecommitdiff
path: root/third_party/ply/example/BASIC/basic.py
diff options
context:
space:
mode:
authormax99x <max99x@gmail.com>2011-07-06 16:37:28 +0300
committermax99x <max99x@gmail.com>2011-07-06 16:37:28 +0300
commitdedb83b9e15591893e1b30220c721e447518f5d9 (patch)
tree87068307ade1fbcff662fcef5e943d944f4f7374 /third_party/ply/example/BASIC/basic.py
parent13ac46b2c9be4aa17319c450a15ed96b71e091d7 (diff)
parente84f1845f1a96ecfda4f1ffc0ba2052dc7c8c86d (diff)
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'third_party/ply/example/BASIC/basic.py')
-rw-r--r--third_party/ply/example/BASIC/basic.py71
1 files changed, 71 insertions, 0 deletions
diff --git a/third_party/ply/example/BASIC/basic.py b/third_party/ply/example/BASIC/basic.py
new file mode 100644
index 00000000..b14483d2
--- /dev/null
+++ b/third_party/ply/example/BASIC/basic.py
@@ -0,0 +1,71 @@
+# An implementation of Dartmouth BASIC (1964)
+#
+
+import sys
+sys.path.insert(0,"../..")
+
+if sys.version_info[0] >= 3:
+ raw_input = input
+
+import basiclex
+import basparse
+import basinterp
+
+# If a filename has been specified, we try to run it.
+# If a runtime error occurs, we bail out and enter
+# interactive mode below
+if len(sys.argv) == 2:
+ data = open(sys.argv[1]).read()
+ prog = basparse.parse(data)
+ if not prog: raise SystemExit
+ b = basinterp.BasicInterpreter(prog)
+ try:
+ b.run()
+ raise SystemExit
+ except RuntimeError:
+ pass
+
+else:
+ b = basinterp.BasicInterpreter({})
+
+# Interactive mode. This incrementally adds/deletes statements
+# from the program stored in the BasicInterpreter object. In
+# addition, special commands 'NEW','LIST',and 'RUN' are added.
+# Specifying a line number with no code deletes that line from
+# the program.
+
+while 1:
+ try:
+ line = raw_input("[BASIC] ")
+ except EOFError:
+ raise SystemExit
+ if not line: continue
+ line += "\n"
+ prog = basparse.parse(line)
+ if not prog: continue
+
+ keys = list(prog)
+ if keys[0] > 0:
+ b.add_statements(prog)
+ else:
+ stat = prog[keys[0]]
+ if stat[0] == 'RUN':
+ try:
+ b.run()
+ except RuntimeError:
+ pass
+ elif stat[0] == 'LIST':
+ b.list()
+ elif stat[0] == 'BLANK':
+ b.del_line(stat[1])
+ elif stat[0] == 'NEW':
+ b.new()
+
+
+
+
+
+
+
+
+