Add /deps.sh, in /linapple remove full-screen mode to make it run properly on recent...
[applesoft_basic.git] / tok_to_bas.l
1 /*
2  * Copyright (C) 2022 Nick Downing <nick@ndcode.org>
3  * SPDX-License-Identifier: GPL-2.0-only
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License as published by the Free
7  * Software Foundation; version 2.
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12  * more details.
13  *
14  * You should have received a copy of the GNU General Public License along with
15  * this program; if not, write to the Free Software Foundation, Inc., 51
16  * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18
19 %start DATA DATA_TEXT REM_TEXT STR_LITERAL
20
21 %%
22
23 <INITIAL,DATA>{
24   " "
25   \" {
26     ECHO()
27     yy_push_state(STR_LITERAL)
28   }
29 }
30 <INITIAL>{
31   \x80 {
32     yyout.write('END')
33   }
34   \x81 {
35     yyout.write('FOR')
36   }
37   \x82 {
38     yyout.write('NEXT')
39   }
40   \x83 {
41     yyout.write('DATA')
42     BEGIN(DATA)
43   }
44   \x84 {
45     yyout.write('INPUT')
46   }
47   \x85 {
48     yyout.write('DEL')
49   }
50   \x86 {
51     yyout.write('DIM')
52   }
53   \x87 {
54     yyout.write('READ')
55   }
56   \x88 {
57     yyout.write('GR')
58   }
59   \x89 {
60     yyout.write('TEXT')
61   }
62   \x8a {
63     yyout.write('PR#')
64   }
65   \x8b {
66     yyout.write('IN#')
67   }
68   \x8c {
69     yyout.write('CALL')
70   }
71   \x8d {
72     yyout.write('PLOT')
73   }
74   \x8e {
75     yyout.write('HLIN')
76   }
77   \x8f {
78     yyout.write('VLIN')
79   }
80   \x90 {
81     yyout.write('HGR2')
82   }
83   \x91 {
84     yyout.write('HGR')
85   }
86   \x92 {
87     yyout.write('HCOLOR=')
88   }
89   \x93 {
90     yyout.write('HPLOT')
91   }
92   \x94 {
93     yyout.write('DRAW')
94   }
95   \x95 {
96     yyout.write('XDRAW')
97   }
98   \x96 {
99     yyout.write('HTAB')
100   }
101   \x97 {
102     yyout.write('HOME')
103   }
104   \x98 {
105     yyout.write('ROT=')
106   }
107   \x99 {
108     yyout.write('SCALE=')
109   }
110   \x9a {
111     yyout.write('SHLOAD')
112   }
113   \x9b {
114     yyout.write('TRACE')
115   }
116   \x9c {
117     yyout.write('NOTRACE')
118   }
119   \x9d {
120     yyout.write('NORMAL')
121   }
122   \x9e {
123     yyout.write('INVERSE')
124   }
125   \x9f {
126     yyout.write('FLASH')
127   }
128   \xa0 {
129     yyout.write('COLOR=')
130   }
131   \xa1 {
132     yyout.write('POP')
133   }
134   \xa2 {
135     yyout.write('VTAB')
136   }
137   \xa3 {
138     yyout.write('HIMEM:')
139   }
140   \xa4 {
141     yyout.write('LOMEM:')
142   }
143   \xa5 {
144     yyout.write('ONERR')
145   }
146   \xa6 {
147     yyout.write('RESUME')
148   }
149   \xa7 {
150     yyout.write('RECALL')
151   }
152   \xa8 {
153     yyout.write('STORE')
154   }
155   \xa9 {
156     yyout.write('SPEED=')
157   }
158   \xaa {
159     yyout.write('LET')
160   }
161   \xab {
162     yyout.write('GOTO')
163   }
164   \xac {
165     yyout.write('RUN')
166   }
167   \xad {
168     yyout.write('IF')
169   }
170   \xae {
171     yyout.write('RESTORE')
172   }
173   \xaf {
174     yyout.write('&')
175   }
176   \xb0 {
177     yyout.write('GOSUB')
178   }
179   \xb1 {
180     yyout.write('RETURN')
181   }
182   \xb2 {
183     yyout.write('REM')
184     BEGIN(REM_TEXT)
185   }
186   \xb3 {
187     yyout.write('STOP')
188   }
189   \xb4 {
190     yyout.write('ON')
191   }
192   \xb5 {
193     yyout.write('WAIT')
194   }
195   \xb6 {
196     yyout.write('LOAD')
197   }
198   \xb7 {
199     yyout.write('SAVE')
200   }
201   \xb8 {
202     yyout.write('DEF')
203   }
204   \xb9 {
205     yyout.write('POKE')
206   }
207   \xba {
208     yyout.write('PRINT')
209   }
210   \xbb {
211     yyout.write('CONT')
212   }
213   \xbc {
214     yyout.write('LIST')
215   }
216   \xbd {
217     yyout.write('CLEAR')
218   }
219   \xbe {
220     yyout.write('GET')
221   }
222   \xbf {
223     yyout.write('NEW')
224   }
225   \xc0 {
226     yyout.write('TAB(')
227   }
228   \xc1 {
229     yyout.write('TO')
230   }
231   \xc2 {
232     yyout.write('FN')
233   }
234   \xc3 {
235     yyout.write('SPC(')
236   }
237   \xc4 {
238     yyout.write('THEN')
239   }
240   \xc5 {
241     yyout.write('AT')
242   }
243   \xc6 {
244     yyout.write('NOT')
245   }
246   \xc7 {
247     yyout.write('STEP')
248   }
249   \xc8 {
250     yyout.write('+')
251   }
252   \xc9 {
253     yyout.write('-')
254   }
255   \xca {
256     yyout.write('*')
257   }
258   \xcb {
259     yyout.write('/')
260   }
261   \xcc {
262     yyout.write('^')
263   }
264   \xcd {
265     yyout.write('AND')
266   }
267   \xce {
268     yyout.write('OR')
269   }
270   \xcf {
271     yyout.write('>')
272   }
273   \xd0 {
274     yyout.write('=')
275   }
276   \xd1 {
277     yyout.write('<')
278   }
279   \xd2 {
280     yyout.write('SGN')
281   }
282   \xd3 {
283     yyout.write('INT')
284   }
285   \xd4 {
286     yyout.write('ABS')
287   }
288   \xd5 {
289     yyout.write('USR')
290   }
291   \xd6 {
292     yyout.write('FRE')
293   }
294   \xd7 {
295     yyout.write('SCRN(')
296   }
297   \xd8 {
298     yyout.write('PDL')
299   }
300   \xd9 {
301     yyout.write('POS')
302   }
303   \xda {
304     yyout.write('SQR')
305   }
306   \xdb {
307     yyout.write('RND')
308   }
309   \xdc {
310     yyout.write('LOG')
311   }
312   \xdd {
313     yyout.write('EXP')
314   }
315   \xde {
316     yyout.write('COS')
317   }
318   \xdf {
319     yyout.write('SIN')
320   }
321   \xe0 {
322     yyout.write('TAN')
323   }
324   \xe1 {
325     yyout.write('ATN')
326   }
327   \xe2 {
328     yyout.write('PEEK')
329   }
330   \xe3 {
331     yyout.write('LEN')
332   }
333   \xe4 {
334     yyout.write('STR$')
335   }
336   \xe5 {
337     yyout.write('VAL')
338   }
339   \xe6 {
340     yyout.write('ASC')
341   }
342   \xe7 {
343     yyout.write('CHR$')
344   }
345   \xe8 {
346     yyout.write('LEFT$')
347   }
348   \xe9 {
349     yyout.write('RIGHT$')
350   }
351   \xea {
352     yyout.write('MID$')
353   }
354 }
355 <DATA,DATA_TEXT>{
356   :|\n {
357     ECHO()
358     BEGIN(INITIAL)
359   }
360 }
361 <DATA>{
362   [^ ,] {
363     ECHO()
364     BEGIN(DATA_TEXT)
365   }
366 }
367 <DATA_TEXT>{
368   , {
369     ECHO()
370     BEGIN(DATA)
371   }
372 }
373
374 <REM_TEXT>{
375   \n {
376     ECHO()
377     BEGIN(INITIAL)
378   }
379 }
380
381 <STR_LITERAL>{
382   \" {
383     ECHO()
384     yy_pop_state()
385   }
386   \n {
387     ECHO()
388     yy_pop_state()
389     BEGIN(INITIAL)
390   }  
391 }
392
393 %%
394
395 if __name__ == '__main__':
396   while yylex():
397     pass