annotate src/parse.s @ 132:917b4893bb3d

Checkpoint before redoing a bunch of code for clarity
author William Astle <lost@l-w.ca>
date Mon, 24 Jun 2024 23:44:39 -0600
parents 95f174bf459b
children 5d4801c0566d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
121
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
1 *pragmapush list
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
2 *pragma list
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
3 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
4 ; This is the overall parsing package. This is responsible for converting program text into the internal byte code and
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
5 ; reporting any syntax errors and anything else reasonably detectable at parse time without having overly complicated
132
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
6 ; code analysis. In almost all cases, the returned error will be a syntax error. The internal byte code shares the same
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
7 ; token number allocations as the parser. Some allocated tokens cannot be identified by the lexer (parse_nexttok) but
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
8 ; are used at runtime and when "decompiling" to text.
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
9 ;
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
10 ; In the event of a parse error, everything up to the next end of statement is retained as is using a special token
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
11 ; that preserves the unparsable text and parsing resumes. Only the first error is referenced by the return error
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
12 ; pointer.
121
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
13 ;
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
14 ; This is a recursive descent parser.
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
15 ;
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
16 ; Entry:
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
17 ; X Points to the text to encode
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
18 ; B Nonzero to prevent generating any output (error check/length calculation only)
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
19 ;
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
20 ; Exit:
132
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
21 ; X Points to the encoded line
121
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
22 ; D Length of the encoded line
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
23 ; CC.C clear
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
24
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
25 ; Error Exit:
132
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
26 ; X Points to the encoded line
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
27 ; D Length of the encoded line
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
28 ; Y Pointer to the first error location in the input
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
29 ; U Error code
121
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
30 ; CC.C set
132
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
31 ;
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
32 ; This is the error handler. It is responsible for resetting the stack to bail out to the top level
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
33 ; parsing loop. It must also store the input pointer if this is the first error. Finally, it has to
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
34 ; output all the text up to either the end of the line *or* the next valid statement separator.
130
9f23ddc5165f Various updates to parsing scheme to handle errors and make it build
William Astle <lost@l-w.ca>
parents: 129
diff changeset
35 parse_errorsn ldb #err_sn
9f23ddc5165f Various updates to parsing scheme to handle errors and make it build
William Astle <lost@l-w.ca>
parents: 129
diff changeset
36 parse_error lds parse_stackptr ; restore the original stack pointer so we can call from down stack
9f23ddc5165f Various updates to parsing scheme to handle errors and make it build
William Astle <lost@l-w.ca>
parents: 129
diff changeset
37 puls u ; get back original free pointer
9f23ddc5165f Various updates to parsing scheme to handle errors and make it build
William Astle <lost@l-w.ca>
parents: 129
diff changeset
38 stu freestart ; deallocate any allocated result
9f23ddc5165f Various updates to parsing scheme to handle errors and make it build
William Astle <lost@l-w.ca>
parents: 129
diff changeset
39 ldu parse_tokenst ; get start location of the token where the error was raised
9f23ddc5165f Various updates to parsing scheme to handle errors and make it build
William Astle <lost@l-w.ca>
parents: 129
diff changeset
40 coma ; make sure C is set for error
9f23ddc5165f Various updates to parsing scheme to handle errors and make it build
William Astle <lost@l-w.ca>
parents: 129
diff changeset
41 rts
121
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
42 parse stb parse_noout ; save no-output flag
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
43 leay ,x ; save input pointer in a less useful register
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
44 ldu freestart ; point to start of free memory where we will build the output
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
45 pshs u ; save original free memory location
130
9f23ddc5165f Various updates to parsing scheme to handle errors and make it build
William Astle <lost@l-w.ca>
parents: 129
diff changeset
46 sts parse_stackptr ; save the stack pointer for bailing out on errors
121
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
47 parse_nextstmt jsr parse_nexttok ; fetch the next token, return type in D
130
9f23ddc5165f Various updates to parsing scheme to handle errors and make it build
William Astle <lost@l-w.ca>
parents: 129
diff changeset
48 bcs parse_error ; brif we failed at parsing a token
126
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
49 parse0 ldx #parsetab_cmd ; point to jump table for token type handler
127
527212870064 Add parsing routines for bare commands and REM statements
William Astle <lost@l-w.ca>
parents: 126
diff changeset
50 cmpb #token_stmtsep ; is it a statement separator?
527212870064 Add parsing routines for bare commands and REM statements
William Astle <lost@l-w.ca>
parents: 126
diff changeset
51 beq parse_nextstmt ; brif so - we can just skip it
126
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
52 parse1 cmpb ,x ; did we match a valid command token?
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
53 beq parse3 ; brif so
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
54 leax 3,x ; move to next entry
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
55 cmpx #parsetab_cmde ; end of table?
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
56 blo parse1 ; brif not
131
95f174bf459b Add error handling for immediate mode loop
William Astle <lost@l-w.ca>
parents: 130
diff changeset
57 bra parse_errorsn ; fell off the end
126
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
58 parse3 jsr [1,x] ; call the handler
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
59 bcs parse_error ; brif the handler indicated error
127
527212870064 Add parsing routines for bare commands and REM statements
William Astle <lost@l-w.ca>
parents: 126
diff changeset
60 bsr parse_curtoken ; fetch the token we left off on
121
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
61 cmpb #token_eot ; end of input?
126
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
62 bne parse4 ; brif not
121
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
63 ldb #bc_eol ; stash an end of line op
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
64 bsr parse_write
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
65 bcs parse_error ; brif we errored out writing to the result (OM?)
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
66 tfr u,d ; calculate the length of the result
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
67 subd ,s
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
68 puls u,pc ; get pointer to start of encoded result and return (C is already clear)
126
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
69 parse4 cmpb #token_stmtsep ; statement separator?
121
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
70 beq parse_nextstmt ; brif so - do another statement
126
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
71 cmpb #token_remabbr ; ' token?
121
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
72 beq parse0 ; brif so - parse it as a new statement
130
9f23ddc5165f Various updates to parsing scheme to handle errors and make it build
William Astle <lost@l-w.ca>
parents: 129
diff changeset
73 bra parse_errorsn ; raise a syntax error
121
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
74 parse_write lda parse_noout ; are we doing output?
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
75 beq parse_write0 ; brif so
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
76 leau 1,u ; just count up the output and don't do anything
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
77 rts
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
78 parse_write0 leax -stackheadroom,s ; calculate bottom of stack with headroom
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
79 cmpx freestart ; did the stack run into the end of the output?
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
80 bhs parse_write1 ; brif not - we're good
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
81 ldb #err_om ; raise out of memory error, C already set from comparison
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
82 rts
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
83 parse_write1 stb ,u+ ; save output byte
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
84 stu freestart ; save new to of used memory
126
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
85 list_noop
121
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
86 parse_noop rts ; return all clear - C clear from comparison above
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
87 parse_curtoken ldb parse_curtok ; fetch token code of current token
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
88 rts
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
89 parse_tokerr comb ; flag error - unexpected token
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
90 ldb #err_sn ; raise syntax error
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
91 rts
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
92 parse_nextchar lda ,y ; at end of input already?
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
93 beq parse_curchar ; brif so
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
94 leay 1,y ; move to next input character
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
95 parse_curchar lda ,y ; fetch input character
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
96 rts
132
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
97 parse_nexttokc bsr parse_nexttok ; fetch next token
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
98 parse_iseos cmpb #token_eot ; end of text?
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
99 beq parse_iseos0 ; brif so
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
100 cmpb #token_stmtsep ; is it a statement separator
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
101 parse_iseos0 rts
121
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
102 parse_nexttok bsr parse_curchar ; fetch current input
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
103 beq parse_nexttok1 ; brif end of input
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
104 parse_nexttok0 cmpa #0x20 ; space?
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
105 bne parse_nexttok2 ; brif not
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
106 bsr parse_nextchar ; eat the space
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
107 bne parse_nexttok0 ; brif not end of input
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
108 parse_nexttok1 ldb #token_eot ; flag end of input
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
109 bra parse_nexttok6 ; go return it
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
110 parse_nexttok2 sty parse_tokenst ; save start of current token after skipping spaces
124
8770e6f977c3 Rework parser to use parse_wordtab for symbols too
William Astle <lost@l-w.ca>
parents: 123
diff changeset
111 bsr parse_toupper ; make sure we have upper case letters for matching
8770e6f977c3 Rework parser to use parse_wordtab for symbols too
William Astle <lost@l-w.ca>
parents: 123
diff changeset
112 ldx #parse_wt ; point to keyword parsing table
130
9f23ddc5165f Various updates to parsing scheme to handle errors and make it build
William Astle <lost@l-w.ca>
parents: 129
diff changeset
113 jsr parse_wordtab ; go see if we have a match in the keyword table
124
8770e6f977c3 Rework parser to use parse_wordtab for symbols too
William Astle <lost@l-w.ca>
parents: 123
diff changeset
114 bcc parse_nexttok6 ; brif we do - return it
8770e6f977c3 Rework parser to use parse_wordtab for symbols too
William Astle <lost@l-w.ca>
parents: 123
diff changeset
115 ldy parse_tokenst ; return to the start of the token - pointer probably clobbered
8770e6f977c3 Rework parser to use parse_wordtab for symbols too
William Astle <lost@l-w.ca>
parents: 123
diff changeset
116 bsr parse_curchar ; get back input character (may have been clobbered)
121
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
117 cmpa #'. ; leading decimal?
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
118 beq parse_nexttok3 ; brif so - parse number
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
119 cmpa #'0 ; is it a digit
124
8770e6f977c3 Rework parser to use parse_wordtab for symbols too
William Astle <lost@l-w.ca>
parents: 123
diff changeset
120 blo parse_nexttok10 ; brif not
121
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
121 cmpa #'9 ; is it still a digit?
124
8770e6f977c3 Rework parser to use parse_wordtab for symbols too
William Astle <lost@l-w.ca>
parents: 123
diff changeset
122 bhi parse_nexttok10 ; brif not
121
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
123 parse_nexttok3 jmp parse_number ; go parse a number
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
124 parse_nexttok6 stb parse_curtok ; save token type
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
125 leay 1,y ; eat the input character
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
126 clra ; clear C to indicate no error (and clear Z also)
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
127 rts
124
8770e6f977c3 Rework parser to use parse_wordtab for symbols too
William Astle <lost@l-w.ca>
parents: 123
diff changeset
128 parse_nexttok10 cmpa #'A ; is it alpha?
121
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
129 blo parse_nexttok11 ; brif not
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
130 cmpa #'Z ; is it still alpha?
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
131 bls parse_nexttok12 ; brif so
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
132 parse_nexttok11 comb ; flag error - unrecognized token
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
133 ldb #token_error
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
134 rts
124
8770e6f977c3 Rework parser to use parse_wordtab for symbols too
William Astle <lost@l-w.ca>
parents: 123
diff changeset
135 parse_nexttok12 bsr parse_nextcharu ; fetch next input character
8770e6f977c3 Rework parser to use parse_wordtab for symbols too
William Astle <lost@l-w.ca>
parents: 123
diff changeset
136 cmpa #'0 ; is it alphanumeric?
8770e6f977c3 Rework parser to use parse_wordtab for symbols too
William Astle <lost@l-w.ca>
parents: 123
diff changeset
137 blo parse_nexttok13 ; brif not
8770e6f977c3 Rework parser to use parse_wordtab for symbols too
William Astle <lost@l-w.ca>
parents: 123
diff changeset
138 cmpa #'9 ; is it numeric?
8770e6f977c3 Rework parser to use parse_wordtab for symbols too
William Astle <lost@l-w.ca>
parents: 123
diff changeset
139 bls parse_nexttok12 ; brif so - keep skipping it
8770e6f977c3 Rework parser to use parse_wordtab for symbols too
William Astle <lost@l-w.ca>
parents: 123
diff changeset
140 cmpa #'A ; is it alpha?
8770e6f977c3 Rework parser to use parse_wordtab for symbols too
William Astle <lost@l-w.ca>
parents: 123
diff changeset
141 blo parse_nexttok13 ; brif not
8770e6f977c3 Rework parser to use parse_wordtab for symbols too
William Astle <lost@l-w.ca>
parents: 123
diff changeset
142 cmpa #'Z ; is it still alpha?
8770e6f977c3 Rework parser to use parse_wordtab for symbols too
William Astle <lost@l-w.ca>
parents: 123
diff changeset
143 bls parse_nexttok12 ; brif so - keep skipping it
8770e6f977c3 Rework parser to use parse_wordtab for symbols too
William Astle <lost@l-w.ca>
parents: 123
diff changeset
144 parse_nexttok13 tfr y,d ; calculate length of identifier
8770e6f977c3 Rework parser to use parse_wordtab for symbols too
William Astle <lost@l-w.ca>
parents: 123
diff changeset
145 subd parse_tokenst
8770e6f977c3 Rework parser to use parse_wordtab for symbols too
William Astle <lost@l-w.ca>
parents: 123
diff changeset
146 std val0+val.strlen ; save it for reference
8770e6f977c3 Rework parser to use parse_wordtab for symbols too
William Astle <lost@l-w.ca>
parents: 123
diff changeset
147 ldb #token_ident ; indicate an identifier (variable name, etc.)
8770e6f977c3 Rework parser to use parse_wordtab for symbols too
William Astle <lost@l-w.ca>
parents: 123
diff changeset
148 rts ; return result (C will be clear from SUBD above)
121
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
149 parse_nextcharu bsr parse_nextchar ; fetch next input character
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
150 beq parse_toupper0 ; brif end of input
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
151 parse_toupper cmpa #'a ; is it lower case alpha?
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
152 blo parse_toupper0 ; brif not
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
153 cmpa #'z ; is it still lower case alpha?
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
154 bhi parse_toupper0 ; brif not
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
155 suba #0x20 ; adjust to upper case alpha
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
156 parse_toupper0 rts ; Z only set here if input was zero entering from parse_nextcharu
126
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
157 parse_number jmp parse_tokerr
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
158 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
127
527212870064 Add parsing routines for bare commands and REM statements
William Astle <lost@l-w.ca>
parents: 126
diff changeset
159 ; Parse a statement that consists of just the command token
527212870064 Add parsing routines for bare commands and REM statements
William Astle <lost@l-w.ca>
parents: 126
diff changeset
160 parse_cmdsingle equ parse_write ; just write the token out and bail
527212870064 Add parsing routines for bare commands and REM statements
William Astle <lost@l-w.ca>
parents: 126
diff changeset
161 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
527212870064 Add parsing routines for bare commands and REM statements
William Astle <lost@l-w.ca>
parents: 126
diff changeset
162 ; Parse a REM or ' statement. We just copy the comment out after the REM or ' token.
527212870064 Add parsing routines for bare commands and REM statements
William Astle <lost@l-w.ca>
parents: 126
diff changeset
163 parse_rem jsr parse_write ; write the token/character out
527212870064 Add parsing routines for bare commands and REM statements
William Astle <lost@l-w.ca>
parents: 126
diff changeset
164 ldb ,y+ ; get next input character
527212870064 Add parsing routines for bare commands and REM statements
William Astle <lost@l-w.ca>
parents: 126
diff changeset
165 bne parse_rem ; brif not at the end of the input
527212870064 Add parsing routines for bare commands and REM statements
William Astle <lost@l-w.ca>
parents: 126
diff changeset
166 ldb #token_eot ; flag end of input for mainline parser
527212870064 Add parsing routines for bare commands and REM statements
William Astle <lost@l-w.ca>
parents: 126
diff changeset
167 stb parse_curtok
527212870064 Add parsing routines for bare commands and REM statements
William Astle <lost@l-w.ca>
parents: 126
diff changeset
168 rts ; return, pass back the C result from parse_write
527212870064 Add parsing routines for bare commands and REM statements
William Astle <lost@l-w.ca>
parents: 126
diff changeset
169 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
123
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
170 ; This routine parses tokens using the table at parse_wordtab. The table is structured as follows:
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
171 ;
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
172 ; * two bytes which contain the length of the table less the two bytes for this length value
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
173 ; * a sequence of entries consisting of a single byte matching character and a token code followed
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
174 ; by an optional sub table, structured exactly the same way.
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
175 ;
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
176 ; The optional subtable will be present if the token code is token_eot
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
177 ;
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
178 ; If the character match is negative, it means a lookahead failed. The negative value is the number
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
179 ; of characters to unget and the token code is the token value to return. No other entries after this
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
180 ; in a table will be considered since thie negative match is a global match.
121
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
181 ;
123
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
182 ; When a token_eot match is found, if there are no further characters in the input, the match is
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
183 ; determined to be invalid and processing continues with the next entry.
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
184 parse_wordtab0 leas 3,s ; clean up stack for sub table handling
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
185 parse_wordtab pshs a,x ; save input character and start of table
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
186 ldd ,x++ ; get length of this table
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
187 addd 1,s ; calculate the address of the end of the table
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
188 std 1,s ; save end address for comparison later
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
189 lda ,s ; get back input character
125
0607e4e20702 Correct offset error for keyword table lookup
William Astle <lost@l-w.ca>
parents: 124
diff changeset
190 parse_wordtab1 ldb 1,x ; fetch token code for this entry
123
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
191 cmpa ,x++ ; does this entry match?
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
192 bne parse_wordtab4 ; brif not
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
193 cmpb #token_eot ; is it indicating a sub table?
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
194 bne parse_wordtab6 ; brif not
130
9f23ddc5165f Various updates to parsing scheme to handle errors and make it build
William Astle <lost@l-w.ca>
parents: 129
diff changeset
195 jsr parse_nextcharu ; fetch next input character (for sub table match)
123
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
196 bne parse_wordtab0 ; brif we are going to check the sub table
126
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
197 parse_wordtab2 ldd ,x ; fetch length of sub table
123
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
198 leax d,x ; move past sub table
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
199 parse_wordtab3 lda ,s ; get back input character
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
200 cmpx 1,s ; are we at the end of the table?
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
201 blo parse_wordtab1 ; brif not - check another entry
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
202 comb ; indicate no match
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
203 puls a,x,pc ; clean up stack and return
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
204 parse_wordtab4 lda -2,x ; get the match character
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
205 bmi parse_wordtab5 ; brif negative - lookahead fail
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
206 cmpb #token_eot ; is there a sub table to skip?
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
207 beq parse_wordtab2 ; brif so - skip sub table
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
208 bra parse_wordtab3 ; otherwise just move to the next entry
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
209 parse_wordtab5 leay a,y ; move back the specified number of characters
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
210 parse_wordtab6 clra ; clear C to indicate a match
5681cdada362 Redo keyword table handling to handle keywords differing in length
William Astle <lost@l-w.ca>
parents: 121
diff changeset
211 puls a,x,pc ; clean up stack and return
126
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
212 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
213 ; Convert a token number back to its keyword. This will use the same table used by parse_wordtab. Enter with a character
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
214 ; output routine pointer in U which takes the character in A. The routine can assume that Y is preserved. Will return
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
215 ; with C set if the token does not exist in the word table and clear otherwise.
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
216 parse_wtdc pshs u ; save routine pointer
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
217 ldu #strbuff+20 ; point to temporary string buffer
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
218 clr ,-u ; put a NUL at the end of the string
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
219 ldx #parse_wt ; point to keyword parse table
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
220 bsr parse_wtdc2 ; call the tree walker function
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
221 bcc parse_wtdc1 ; brif we do have a match
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
222 puls u,pc ; clean stack and return
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
223 parse_wtdc0 jsr [,s] ; output the character
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
224 parse_wtdc1 lda ,u+ ; get output byte
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
225 bne parse_wtdc0 ; brif we're not at the end yet
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
226 clra ; make sure C is clear
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
227 puls u,pc ; clean stack and return
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
228 parse_wtdc2 pshs a,x ; save the token match value and the table pointer
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
229 ldd ,x++ ; get table length
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
230 addd 1,s ; calculate end address
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
231 std 1,s ; save it
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
232 parse_wtdc3 ldd ,x++ ; get this table entry
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
233 bmi parse_wtdc6 ; brif it's a backtracking entry - skip it
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
234 cmpa ,s ; does the token match here?
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
235 bne parse_wtdc5 ; brif not
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
236 parse_wtdc4 sta ,-y ; add the character to the output buffer
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
237 puls a,x,pc ; return up the call stack - C is clear from CMPA above
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
238 parse_wtdc5 cmpb #token_eot ; does this entry have a sub table?
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
239 bne parse_wtdc6 ; brif not
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
240 pshs a ; save the matched character
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
241 lda 1,s ; get back the token we need
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
242 bsr parse_wtdc2 ; go handle the sub table
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
243 puls a ; get back the matched character
129
d5886daa4f65 Fix a less than brilliant branch target in token to keyword routine
William Astle <lost@l-w.ca>
parents: 127
diff changeset
244 bcc parse_wtdc4 ; brif it did match - record it and return
126
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
245 parse_wtdc6 cmpx 1,s ; are we at the end of this table?
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
246 bne parse_wtdc3 ; brif not - handle another table entry
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
247 coma ; make sure C is set for no match
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
248 puls a,x,pc ; clean up stack and return
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
249 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
132
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
250 ; Validate a line number. Must enter with the token type in B. Will return the line number in X. It will return a
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
251 ; syntax error if the line number is invalid or out of range. It will also consume a valid line number token.
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
252 parse_linenum cmpb #token_int32 ; is it an integer?
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
253 beq parse_linenum1 ; brif so
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
254 parse_linenum0 ldb #err_sn ; flag syntax error
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
255 coma ; flag error
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
256 rts
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
257 parse_linenum1 ldx val0+val.int ; get high word of integer
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
258 bne parse_linenum0 ; brif not a valid line number
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
259 ldx val0+val.int+2 ; get actual line number
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
260 pshs x ; save it
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
261 jsr parse_nexttok ; consume line number
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
262 puls x,pc ; get back line number and return it
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
263 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
264 ; Parse a line number range which is one of the following forms:
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
265 ; <linenum1>
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
266 ; <linenum1>-
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
267 ; <linenum1>-<linenum2>
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
268 ; -<linenum2>
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
269 ; The result will store two line numbers. If no - token appears, then both line numbers will be the same. Otherwise,
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
270 ; if <linenum1> is omitted, it will be assumed to be 0. If <linenum2> is omitted, it will be assumed to be 65535. Those
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
271 ; are the minimum and maximum line numbers.
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
272 ;
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
273 ; Parsing works by first looking for an integer token that is in range. If it finds one, it looks for an optional -
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
274 ; followed by an optional integer token that is in range. If the first token is not an integer, it must be a - which may
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
275 ; be optionally followed by another integer in range.
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
276 ;
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
277 ; It is technically valid to have a single - with no line numbers.
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
278 ;
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
279 ; Enter with the current token in B.
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
280 ;
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
281 ; The resulting line numbers will be returned in parse_buff
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
282 parse_linerange ldx zero ; default start line number
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
283 leau -1,x ; default end line number
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
284 pshs x,u ; save the return range
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
285 cmpb #token_minus ; range with no start?
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
286 beq parse_linerang1 ; brif so
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
287 bsr parse_linenum ; verify line number, return in X
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
288 bcs parse_linerang4 ; bail out on error
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
289 stx ,s ; save new start line number
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
290 jsr parse_nexttokc ; fetch next token, set Z if end of statement
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
291 bne parse_linerang0 ; brif not end of line
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
292 ldx ,s ; get end line to use as start line
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
293 bra parse_linerang2 ; go set range end and return
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
294 parse_linerang0 cmpb #token_minus ; do we have a range character?
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
295 bne parse_linerang3 ; brif not - we have an error
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
296 parse_linerang1 jsr parse_nexttokc ; parse what comes after the range mark
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
297 beq parse_linerang2 ; brif end of statement - use the default range end
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
298 bsr parse_linenum ; make sure it's a valid line number
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
299 bcs parse_linerang4 ; bail out on error
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
300 parse_linerang2 stx 2,s ; set range end
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
301 clra ; make sure C is clear
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
302 puls x,u,pc ; fetch return values and return
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
303 parse_linerang3 ldb #err_sn ; flag a syntax error
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
304 coma ; make sure C is set
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
305 parse_linerang4 puls x,u,pc ; clean up stack and return error condition
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
306 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
126
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
307 ; This table defines the various handler routines for the various bytecode tokens. Each token is defined as follows:
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
308 ; parse_tokdefT <sym>,<parse>,<list>,<exec>
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
309 ; where:
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
310 ; T: c for command, f for function, p for particle
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
311 ; <sym>: the symbol name without the "token_" prefix
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
312 ; <parse>: parse handler for the type, ignored for particles
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
313 ; <list>: list handler for the type, ingored for particles
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
314 ; <exec>: execution handler for the type, ignored for particles
121
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
315 *pragmapush list
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
316 *pragma nolist
126
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
317 __toknump set 0
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
318 __toknumc set 0x40
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
319 __toknumf set 0xc0
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
320 setstr __cmdparset=""
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
321 setstr __cmdlistt=""
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
322 setstr __cmdexect=""
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
323 setstr __fnparset=""
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
324 setstr __fnlistt=""
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
325 setstr __fnexect=""
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
326 parse_tokendefp macro noexpand
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
327 token_\1 equ __toknump
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
328 __toknump set __toknump+1
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
329 endm
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
330 parse_tokendefc macro noexpand
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
331 token_\1 equ __toknumc
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
332 __toknumc set __toknumc+1
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
333 ifstr ne,"{2}",""
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
334 setstr __cmdparset="%(__cmdparset)\tfcb\ttoken_\1\n\tfdb {2}\n"
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
335 endc
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
336 ifstr ne,"{3}",""
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
337 setstr __cmdlistt="%(__cmdlistt)\tfcb\ttoken_\1\n\tfdb {3}\n"
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
338 endc
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
339 ifstr ne,"{4}",""
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
340 setstr __cmdexect="%(__cmdexect)\tfdb {3}\n"
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
341 else
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
342 setstr __cmdexect="%(__cmdexect)\tfdb SNERROR\n"
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
343 endc
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
344 endm
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
345 parse_tokendeff macro noexpand
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
346 token_\1 equ __toknumf
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
347 __toknumf set __toknumf+1
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
348 ifstr ne,"{2}",""
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
349 setstr __fnparset="%(__fnparset)\tfcb\ttoken_\1\n\tfdb {2}\n"
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
350 endc
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
351 ifstr ne,"{3}",""
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
352 setstr __fnlistt="%(__fnlistt)\tfcb\ttoken_\1\n\tfdb {3}\n"
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
353 endc
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
354 ifstr ne,"{4}",""
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
355 setstr __fnexect="%(__fnexect)\tfdb {3}\n"
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
356 else
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
357 setstr __fnexect="%(__fnexect)\tfdb SNERROR\n"
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
358 endc
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
359 endm
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
360 token_cmdparse macro
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
361 *pragmapush nolist
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
362 *pragma nolist
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
363 includestr "%(__cmdparset)"
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
364 *pragmapop nolist
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
365 endm
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
366 token_cmdlist macro
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
367 *pragmapush nolist
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
368 *pragma nolist
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
369 includestr "%(__cmdlistt)"
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
370 *pragmapop nolist
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
371 endm
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
372 token_cmdexec macro
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
373 *pragmapush nolist
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
374 *pragma nolist
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
375 includestr "%(__cmdexect)"
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
376 token__maxcmd equ __toknumc-1
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
377 *pragmapop nolist
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
378 endm
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
379 token_fnparse macro
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
380 *pragmapush nolist
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
381 *pragma nolist
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
382 includestr "%(__fnparset)"
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
383 *pragmapop nolist
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
384 endm
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
385 token_fnlist macro
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
386 *pragmapush nolist
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
387 *pragma nolist
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
388 includestr "%(__fnlistt)"
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
389 *pragmapop nolist
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
390 endm
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
391 token_fnexec macro
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
392 *pragmapush nolist
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
393 *pragma nolist
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
394 includestr "%(__fnexect)"
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
395 token__maxfn equ __toknumf-1
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
396 *pragmapop nolist
121
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
397 endm
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
398 *pragmapop list
132
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
399 ; the tokens defined in this section all have special parsing or meaning
126
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
400 parse_tokendefp error ; Used to mark errors; should always be first so it's token #0
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
401 parse_tokendefp eot ; End of input marker or special handling in word tables
130
9f23ddc5165f Various updates to parsing scheme to handle errors and make it build
William Astle <lost@l-w.ca>
parents: 129
diff changeset
402 parse_tokendefp int32 ; 32 bit integer (has special parsing)
9f23ddc5165f Various updates to parsing scheme to handle errors and make it build
William Astle <lost@l-w.ca>
parents: 129
diff changeset
403 parse_tokendefp float ; floating point value (has special parsing)
9f23ddc5165f Various updates to parsing scheme to handle errors and make it build
William Astle <lost@l-w.ca>
parents: 129
diff changeset
404 parse_tokendefp ident ; identifier (has special parsing)
132
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
405 parse_tokendefp linenum ; a 16 bit unsigned integer treated as a line number
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
406 parse_tokendefp linerange ; a pair of 16 bit unsigned integers treated as line numbers
917b4893bb3d Checkpoint before redoing a bunch of code for clarity
William Astle <lost@l-w.ca>
parents: 131
diff changeset
407 ; everything below here references keywords or particle characters
126
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
408 parse_tokendefp stmtsep ; statement separator
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
409 parse_tokendefp times ; times (multiplication) operator (*)
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
410 parse_tokendefp plus ; addition operator
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
411 parse_tokendefp divide ; division operator (/)
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
412 parse_tokendefp minus ; subtraction operator
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
413 parse_tokendefp exp ; exponentiation operator (^)
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
414 parse_tokendefp lt ; less than operator
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
415 parse_tokendefp le ; less than or equal operateor
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
416 parse_tokendefp gt ; greater than operator
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
417 parse_tokendefp ge ; greater than or equal operator
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
418 parse_tokendefp eq ; equality operator
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
419 parse_tokendefp ne ; inequality operator
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
420 parse_tokendefp not ; boolean NOT operator
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
421 parse_tokendefp and ; boolean AND operator
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
422 parse_tokendefp or ; boolean OR operator
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
423 parse_tokendefp bang ; exclamation mark
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
424 parse_tokendefp hash ; number sign
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
425 parse_tokendefp dollar ; dollar sign (string sigil)
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
426 parse_tokendefp percent ; percent sign (integer sigil)
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
427 parse_tokendefp amp ; ampersand
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
428 parse_tokendefp oparen ; opening paren
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
429 parse_tokendefp cparen ; closing paren
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
430 parse_tokendefp sep ; comma (separator)
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
431 parse_tokendefp semi ; semicolon
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
432 parse_tokendefp at ; @ symbol
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
433 parse_tokendefp else ; ELSE
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
434 parse_tokendefp then ; THEN
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
435 parse_tokendefp to ; TO
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
436 parse_tokendefp sub ; SUB
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
437 parse_tokendefp as ; AS
121
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
438
127
527212870064 Add parsing routines for bare commands and REM statements
William Astle <lost@l-w.ca>
parents: 126
diff changeset
439 parse_tokendefc remabbr,parse_rem,list_noop,exec_noop ; abbreviated REM (')
527212870064 Add parsing routines for bare commands and REM statements
William Astle <lost@l-w.ca>
parents: 126
diff changeset
440 parse_tokendefc rem,parse_rem,list_noop,exec_noop ; REM
527212870064 Add parsing routines for bare commands and REM statements
William Astle <lost@l-w.ca>
parents: 126
diff changeset
441 parse_tokendefc return,parse_cmdsingle,parse_noop,parse_noop ; RETURN
126
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
442 parse_tokendefc run,parse_noop,parse_noop,parse_noop ; RUN
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
443 parse_tokendefc data,parse_noop,parse_noop,parse_noop ; DATA
127
527212870064 Add parsing routines for bare commands and REM statements
William Astle <lost@l-w.ca>
parents: 126
diff changeset
444 parse_tokendefc end,parse_cmdsingle,parse_noop,parse_noop ; END
527212870064 Add parsing routines for bare commands and REM statements
William Astle <lost@l-w.ca>
parents: 126
diff changeset
445 parse_tokendefc stop,parse_cmdsingle,parse_noop,parse_noop ; STOP
126
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
446 parse_tokendefc let,parse_noop,parse_noop,parse_noop ; LET
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
447 parse_tokendefc list,parse_noop,parse_noop,parse_noop ; LIST
127
527212870064 Add parsing routines for bare commands and REM statements
William Astle <lost@l-w.ca>
parents: 126
diff changeset
448 parse_tokendefc new,parse_cmdsingle,parse_noop,parse_noop ; NEW
126
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
449 parse_tokendefc print,parse_noop,parse_noop,parse_noop ; PRINT
127
527212870064 Add parsing routines for bare commands and REM statements
William Astle <lost@l-w.ca>
parents: 126
diff changeset
450 parse_tokendefc pop,parse_cmdsingle,parse_noop,parse_noop ; POP
126
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
451 parse_tokendefc goto,parse_noop,parse_noop,parse_noop ; GOTO
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
452 parse_tokendefc gosub,parse_noop,parse_noop,parse_noop ; GOSUB
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
453 parse_tokendefc go,parse_noop,parse_noop,parse_noop ; GO
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
454
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
455 parse_tokendeff asc,parse_noop,parse_noop,parse_noop ; ASC()
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
456 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
457 ; Parse handling tables
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
458 parsetab_cmd token_cmdparse
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
459 parsetab_cmde
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
460 parsetab_fn token_fnparse
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
461 parsetab_fne
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
462 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
463 ; List handling tables
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
464 listtab_cmd token_cmdlist
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
465 listtab_cmde
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
466 listtab_fn token_fnlist
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
467 listtab_fne
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
468 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
469 ; Execution handling tables
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
470 exectab_cmd token_cmdexec
ac183a519439 Update parsing scheme with a keyword lookup by token value and other framework
William Astle <lost@l-w.ca>
parents: 125
diff changeset
471 exectab_fn token_fnexec
121
5d5472b11ccd Initital skeleton of separation of separate parsing scheme
William Astle <lost@l-w.ca>
parents:
diff changeset
472 *pragmapop list