/* * Copyright (C) 2022 Nick Downing * SPDX-License-Identifier: GPL-2.0-only * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation; version 2. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 51 * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ %start DATA DATA_TEXT REM_TEXT STR_LITERAL %% { " " \" { ECHO() yy_push_state(STR_LITERAL) } } { \x80 { yyout.write('END') } \x81 { yyout.write('FOR') } \x82 { yyout.write('NEXT') } \x83 { yyout.write('DATA') BEGIN(DATA) } \x84 { yyout.write('INPUT') } \x85 { yyout.write('DEL') } \x86 { yyout.write('DIM') } \x87 { yyout.write('READ') } \x88 { yyout.write('GR') } \x89 { yyout.write('TEXT') } \x8a { yyout.write('PR#') } \x8b { yyout.write('IN#') } \x8c { yyout.write('CALL') } \x8d { yyout.write('PLOT') } \x8e { yyout.write('HLIN') } \x8f { yyout.write('VLIN') } \x90 { yyout.write('HGR2') } \x91 { yyout.write('HGR') } \x92 { yyout.write('HCOLOR=') } \x93 { yyout.write('HPLOT') } \x94 { yyout.write('DRAW') } \x95 { yyout.write('XDRAW') } \x96 { yyout.write('HTAB') } \x97 { yyout.write('HOME') } \x98 { yyout.write('ROT=') } \x99 { yyout.write('SCALE=') } \x9a { yyout.write('SHLOAD') } \x9b { yyout.write('TRACE') } \x9c { yyout.write('NOTRACE') } \x9d { yyout.write('NORMAL') } \x9e { yyout.write('INVERSE') } \x9f { yyout.write('FLASH') } \xa0 { yyout.write('COLOR=') } \xa1 { yyout.write('POP') } \xa2 { yyout.write('VTAB') } \xa3 { yyout.write('HIMEM:') } \xa4 { yyout.write('LOMEM:') } \xa5 { yyout.write('ONERR') } \xa6 { yyout.write('RESUME') } \xa7 { yyout.write('RECALL') } \xa8 { yyout.write('STORE') } \xa9 { yyout.write('SPEED=') } \xaa { yyout.write('LET') } \xab { yyout.write('GOTO') } \xac { yyout.write('RUN') } \xad { yyout.write('IF') } \xae { yyout.write('RESTORE') } \xaf { yyout.write('&') } \xb0 { yyout.write('GOSUB') } \xb1 { yyout.write('RETURN') } \xb2 { yyout.write('REM') BEGIN(REM_TEXT) } \xb3 { yyout.write('STOP') } \xb4 { yyout.write('ON') } \xb5 { yyout.write('WAIT') } \xb6 { yyout.write('LOAD') } \xb7 { yyout.write('SAVE') } \xb8 { yyout.write('DEF') } \xb9 { yyout.write('POKE') } \xba { yyout.write('PRINT') } \xbb { yyout.write('CONT') } \xbc { yyout.write('LIST') } \xbd { yyout.write('CLEAR') } \xbe { yyout.write('GET') } \xbf { yyout.write('NEW') } \xc0 { yyout.write('TAB(') } \xc1 { yyout.write('TO') } \xc2 { yyout.write('FN') } \xc3 { yyout.write('SPC(') } \xc4 { yyout.write('THEN') } \xc5 { yyout.write('AT') } \xc6 { yyout.write('NOT') } \xc7 { yyout.write('STEP') } \xc8 { yyout.write('+') } \xc9 { yyout.write('-') } \xca { yyout.write('*') } \xcb { yyout.write('/') } \xcc { yyout.write('^') } \xcd { yyout.write('AND') } \xce { yyout.write('OR') } \xcf { yyout.write('>') } \xd0 { yyout.write('=') } \xd1 { yyout.write('<') } \xd2 { yyout.write('SGN') } \xd3 { yyout.write('INT') } \xd4 { yyout.write('ABS') } \xd5 { yyout.write('USR') } \xd6 { yyout.write('FRE') } \xd7 { yyout.write('SCRN(') } \xd8 { yyout.write('PDL') } \xd9 { yyout.write('POS') } \xda { yyout.write('SQR') } \xdb { yyout.write('RND') } \xdc { yyout.write('LOG') } \xdd { yyout.write('EXP') } \xde { yyout.write('COS') } \xdf { yyout.write('SIN') } \xe0 { yyout.write('TAN') } \xe1 { yyout.write('ATN') } \xe2 { yyout.write('PEEK') } \xe3 { yyout.write('LEN') } \xe4 { yyout.write('STR$') } \xe5 { yyout.write('VAL') } \xe6 { yyout.write('ASC') } \xe7 { yyout.write('CHR$') } \xe8 { yyout.write('LEFT$') } \xe9 { yyout.write('RIGHT$') } \xea { yyout.write('MID$') } } { :|\n { ECHO() BEGIN(INITIAL) } } { [^ ,] { ECHO() BEGIN(DATA_TEXT) } } { , { ECHO() BEGIN(DATA) } } { \n { ECHO() BEGIN(INITIAL) } } { \" { ECHO() yy_pop_state() } \n { ECHO() yy_pop_state() BEGIN(INITIAL) } } %% if __name__ == '__main__': while yylex(): pass