Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
emscripten-core
GitHub Repository: emscripten-core/emscripten
Path: blob/main/third_party/ply/example/BASIC/basiclog.py
7087 views
1
# An implementation of Dartmouth BASIC (1964)
2
#
3
4
import sys
5
sys.path.insert(0,"../..")
6
7
if sys.version_info[0] >= 3:
8
raw_input = input
9
10
import logging
11
logging.basicConfig(
12
level = logging.INFO,
13
filename = "parselog.txt",
14
filemode = "w"
15
)
16
log = logging.getLogger()
17
18
import basiclex
19
import basparse
20
import basinterp
21
22
# If a filename has been specified, we try to run it.
23
# If a runtime error occurs, we bail out and enter
24
# interactive mode below
25
if len(sys.argv) == 2:
26
data = open(sys.argv[1]).read()
27
prog = basparse.parse(data,debug=log)
28
if not prog: raise SystemExit
29
b = basinterp.BasicInterpreter(prog)
30
try:
31
b.run()
32
raise SystemExit
33
except RuntimeError:
34
pass
35
36
else:
37
b = basinterp.BasicInterpreter({})
38
39
# Interactive mode. This incrementally adds/deletes statements
40
# from the program stored in the BasicInterpreter object. In
41
# addition, special commands 'NEW','LIST',and 'RUN' are added.
42
# Specifying a line number with no code deletes that line from
43
# the program.
44
45
while 1:
46
try:
47
line = raw_input("[BASIC] ")
48
except EOFError:
49
raise SystemExit
50
if not line: continue
51
line += "\n"
52
prog = basparse.parse(line,debug=log)
53
if not prog: continue
54
55
keys = list(prog)
56
if keys[0] > 0:
57
b.add_statements(prog)
58
else:
59
stat = prog[keys[0]]
60
if stat[0] == 'RUN':
61
try:
62
b.run()
63
except RuntimeError:
64
pass
65
elif stat[0] == 'LIST':
66
b.list()
67
elif stat[0] == 'BLANK':
68
b.del_line(stat[1])
69
elif stat[0] == 'NEW':
70
b.new()
71
72
73
74
75
76
77
78
79
80
81