comparison ply-3.8/example/BASIC/basic.py @ 7267:343ff337a19b

<ais523> ` tar -xf ply-3.8.tar.gz
author HackBot
date Wed, 23 Mar 2016 02:40:16 +0000
parents
children
comparison
equal deleted inserted replaced
7266:61a39a120dee 7267:343ff337a19b
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 basiclex
11 import basparse
12 import basinterp
13
14 # If a filename has been specified, we try to run it.
15 # If a runtime error occurs, we bail out and enter
16 # interactive mode below
17 if len(sys.argv) == 2:
18 data = open(sys.argv[1]).read()
19 prog = basparse.parse(data)
20 if not prog: raise SystemExit
21 b = basinterp.BasicInterpreter(prog)
22 try:
23 b.run()
24 raise SystemExit
25 except RuntimeError:
26 pass
27
28 else:
29 b = basinterp.BasicInterpreter({})
30
31 # Interactive mode. This incrementally adds/deletes statements
32 # from the program stored in the BasicInterpreter object. In
33 # addition, special commands 'NEW','LIST',and 'RUN' are added.
34 # Specifying a line number with no code deletes that line from
35 # the program.
36
37 while 1:
38 try:
39 line = raw_input("[BASIC] ")
40 except EOFError:
41 raise SystemExit
42 if not line: continue
43 line += "\n"
44 prog = basparse.parse(line)
45 if not prog: continue
46
47 keys = list(prog)
48 if keys[0] > 0:
49 b.add_statements(prog)
50 else:
51 stat = prog[keys[0]]
52 if stat[0] == 'RUN':
53 try:
54 b.run()
55 except RuntimeError:
56 pass
57 elif stat[0] == 'LIST':
58 b.list()
59 elif stat[0] == 'BLANK':
60 b.del_line(stat[1])
61 elif stat[0] == 'NEW':
62 b.new()
63
64
65
66
67
68
69
70
71