README
1Inspired by a September 14, 2006 Salon article "Why Johnny Can't Code" by
2David Brin (http://www.salon.com/tech/feature/2006/09/14/basic/index.html),
3I thought that a fully working BASIC interpreter might be an interesting,
4if not questionable, PLY example. Uh, okay, so maybe it's just a bad idea,
5but in any case, here it is.
6
7In this example, you'll find a rough implementation of 1964 Dartmouth BASIC
8as described in the manual at:
9
10 http://www.bitsavers.org/pdf/dartmouth/BASIC_Oct64.pdf
11
12See also:
13
14 http://en.wikipedia.org/wiki/Dartmouth_BASIC
15
16This dialect is downright primitive---there are no string variables
17and no facilities for interactive input. Moreover, subroutines and functions
18are brain-dead even more than they usually are for BASIC. Of course,
19the GOTO statement is provided.
20
21Nevertheless, there are a few interesting aspects of this example:
22
23 - It illustrates a fully working interpreter including lexing, parsing,
24 and interpretation of instructions.
25
26 - The parser shows how to catch and report various kinds of parsing
27 errors in a more graceful way.
28
29 - The example both parses files (supplied on command line) and
30 interactive input entered line by line.
31
32 - It shows how you might represent parsed information. In this case,
33 each BASIC statement is encoded into a Python tuple containing the
34 statement type and parameters. These tuples are then stored in
35 a dictionary indexed by program line numbers.
36
37 - Even though it's just BASIC, the parser contains more than 80
38 rules and 150 parsing states. Thus, it's a little more meaty than
39 the calculator example.
40
41To use the example, run it as follows:
42
43 % python basic.py hello.bas
44 HELLO WORLD
45 %
46
47or use it interactively:
48
49 % python basic.py
50 [BASIC] 10 PRINT "HELLO WORLD"
51 [BASIC] 20 END
52 [BASIC] RUN
53 HELLO WORLD
54 [BASIC]
55
56The following files are defined:
57
58 basic.py - High level script that controls everything
59 basiclex.py - BASIC tokenizer
60 basparse.py - BASIC parser
61 basinterp.py - BASIC interpreter that runs parsed programs.
62
63In addition, a number of sample BASIC programs (.bas suffix) are
64provided. These were taken out of the Dartmouth manual.
65
66Disclaimer: I haven't spent a ton of time testing this and it's likely that
67I've skimped here and there on a few finer details (e.g., strictly enforcing
68variable naming rules). However, the interpreter seems to be able to run
69the examples in the BASIC manual.
70
71Have fun!
72
73-Dave
74
75
76
77
78
79
80