/*
- * Copyright (C) 2018 Nick Downing <nick@ndcode.org>
+ * Copyright (C) 2022 Nick Downing <nick@ndcode.org>
* SPDX-License-Identifier: GPL-2.0-only
*
* This program is free software; you can redistribute it and/or modify it
" "
}
<INITIAL>{
- X\ *P\ *L\ *O\ *T/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_XPLOT
- }
- X\ *D\ *R\ *A\ *W/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_XDRAW
- }
- W\ *A\ *I\ *T/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_WAIT
- }
- V\ *T\ *A\ *B/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_VTAB
- }
- V\ *L\ *I\ *N/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_VLIN
- }
- V\ *A\ *L/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_VAL
- }
- U\ *S\ *R/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_USR
- }
- T\ *R\ *A\ *C\ *E/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_TRACE
- }
- T\ *O/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_TO
- }
- T\ *H\ *E\ *N/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_THEN
- }
- T\ *E\ *X\ *T/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_TEXT
- }
- T\ *A\ *N/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_TAN
- }
- T\ *A\ *B\ *\( {
- return y_tab.KEYWORD_TAB_LPAREN
- }
- S\ *T\ *R\ *\$ {
- return y_tab.KEYWORD_STR_DOLLAR
- }
- S\ *T\ *O\ *R\ *E/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_STORE
- }
- S\ *T\ *O\ *P/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_STOP
- }
- S\ *T\ *E\ *P/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_STEP
- }
- S\ *Q\ *R/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_SQR
- }
- S\ *P\ *E\ *E\ *D\ *= {
- return y_tab.KEYWORD_SPEED_EQUAL
- }
- S\ *P\ *C\ *\( {
- return y_tab.KEYWORD_SPC_LPAREN
- }
- S\ *I\ *N/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_SIN
- }
- S\ *H\ *L\ *O\ *A\ *D/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_SHLOAD
- }
- S\ *G\ *N/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_SGN
- }
- S\ *C\ *R\ *N\ *\( {
- return y_tab.KEYWORD_SCRN_LPAREN
- }
- S\ *C\ *A\ *L\ *E\ *= {
- return y_tab.KEYWORD_SCALE_EQUAL
- }
- S\ *A\ *V\ *E/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_SAVE
- }
- R\ *I\ *G\ *H\ *T\ *\$ {
- return y_tab.KEYWORD_RIGHT_DOLLAR
- }
- R\ *E\ *T\ *U\ *R\ *N/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_RETURN
- }
- R\ *E\ *S\ *U\ *M\ *E/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_RESUME
- }
- R\ *E\ *S\ *T\ *O\ *R\ *E/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_RESTORE
- }
- R\ *E\ *M/(\ *[A-Z0-9])*(\ *[$%])? {
- BEGIN(REM)
- return y_tab.KEYWORD_REM
- }
- R\ *E\ *C\ *A\ *L\ *L/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_RECALL
- }
- R\ *E\ *A\ *D/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_READ
- }
- P\ *R\ *I\ *N\ *T/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_PRINT
- }
- P\ *R\ *# {
- return y_tab.KEYWORD_PR_NUMBER
- }
- P\ *O\ *S/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_POS
- }
- P\ *O\ *P/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_POP
- }
- P\ *O\ *K\ *E/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_POKE
- }
- P\ *L\ *O\ *T/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_PLOT
- }
- P\ *E\ *E\ *K/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_PEEK
- }
- P\ *D\ *L/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_PDL
- }
- O\ *R/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_OR
- }
- O\ *N\ *E\ *R\ *R/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_ONERR
- }
- O\ *N/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_ON
- }
- N\ *O\ *T\ *R\ *A\ *C\ *E/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_NOTRACE
- }
- N\ *O\ *T/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_NOT
- }
- N\ *O\ *R\ *M\ *A\ *L/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_NORMAL
- }
- N\ *E\ *X\ *T/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_NEXT
- }
- N\ *E\ *W/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_NEW
- }
- M\ *I\ *D\ *\$ {
- return y_tab.KEYWORD_MID_DOLLAR
- }
- L\ *O\ *M\ *E\ *M\ *: {
- return y_tab.KEYWORD_LOMEM_COLON
- }
- L\ *O\ *G/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_LOG
- }
- L\ *O\ *A\ *D/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_LOAD
- }
- L\ *I\ *S\ *T/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_LIST
- }
- L\ *E\ *T/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_LET
- }
- L\ *E\ *N/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_LEN
- }
- L\ *E\ *F\ *T\ *\$ {
- return y_tab.KEYWORD_LEFT_DOLLAR
- }
- I\ *N\ *V\ *E\ *R\ *S\ *E/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_INVERSE
- }
- I\ *N\ *T/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_INT
- }
- I\ *N\ *P\ *U\ *T/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_INPUT
- }
- I\ *N\ *# {
- return y_tab.KEYWORD_IN_NUMBER
- }
- I\ *F/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_IF
- }
- H\ *T\ *A\ *B/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_HTAB
- }
- H\ *P\ *L\ *O\ *T/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_HPLOT
- }
- H\ *O\ *M\ *E/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_HOME
- }
- H\ *L\ *I\ *N/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_HLIN
- }
- H\ *I\ *M\ *E\ *M\ *: {
- return y_tab.KEYWORD_HIMEM_COLON
- }
- H\ *G\ *R\ *2/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_HGR2
- }
- H\ *G\ *R/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_HGR
- }
- H\ *C\ *O\ *L\ *O\ *R\ *= {
- return y_tab.KEYWORD_HCOLOR_EQUAL
- }
- G\ *R/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_GR
- }
- G\ *O\ *T\ *O/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_GOTO
- }
- G\ *O\ *S\ *U\ *B/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_GOSUB
- }
- G\ *E\ *T/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_GET
- }
- F\ *R\ *E/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_FRE
- }
- F\ *O\ *R/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_FOR
- }
- F\ *N/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_FN
- }
- F\ *L\ *A\ *S\ *H/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_FLASH
- }
- E\ *X\ *P/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_EXP
- }
- E\ *N\ *D/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_END
- }
- D\ *R\ *A\ *W/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_DRAW
- }
- D\ *I\ *M/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_DIM
- }
- D\ *E\ *L/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_DEL
- }
- D\ *E\ *F/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_DEF
- }
- D\ *A\ *T\ *A/(\ *[A-Z0-9])*(\ *[$%])? {
+ \x83 {
BEGIN(DATA)
- return y_tab.KEYWORD_DATA
- }
- C\ *O\ *S/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_COS
+ return ord(yytext)
}
- C\ *O\ *N\ *T/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_CONT
- }
- C\ *O\ *L\ *O\ *R\ *= {
- return y_tab.KEYWORD_COLOR_EQUAL
- }
- C\ *L\ *E\ *A\ *R/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_CLEAR
- }
- C\ *H\ *R\ *\$ {
- return y_tab.KEYWORD_CHR_DOLLAR
- }
- C\ *A\ *L\ *L/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_CALL
- }
- A\ *T\ *N/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_ATN
- }
- A\ *T/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_AT
- }
- A\ *S\ *C/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_ASC
- }
- A\ *N\ *D/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_AND
- }
- A\ *B\ *S/(\ *[A-Z0-9])*(\ *[$%])? {
- return y_tab.KEYWORD_ABS
+ \xb2 {
+ BEGIN(REM)
+ return ord(yytext)
}
(?E{t_def.IntLiteral}(?E{t_def.Text.Char}[0-9])(\ *(?E{t_def.Text.Char}[0-9]))*) {
return y_tab.INT_LITERAL
\"(?E{t_def.StrLiteral}[^"\n]*)\" {
return y_tab.STR_LITERAL
}
+ \"(?E{t_def.StrLiteral}[^"\n]*)$ {
+ return y_tab.STR_LITERAL
+ }
}
<INITIAL>{
\>\ *=|=\ *\> {
/*
- * Copyright (C) 2018 Nick Downing <nick@ndcode.org>
+ * Copyright (C) 2022 Nick Downing <nick@ndcode.org>
* SPDX-License-Identifier: GPL-2.0-only
*
* This program is free software; you can redistribute it and/or modify it
%locations
%token DATA_TEXT
-%token KEYWORD_ABS
-%token KEYWORD_AND
-%token KEYWORD_ASC
-%token KEYWORD_AT
-%token KEYWORD_ATN
-%token KEYWORD_CALL
-%token KEYWORD_CHR_DOLLAR
-%token KEYWORD_CLEAR
-%token KEYWORD_COLOR_EQUAL
-%token KEYWORD_CONT
-%token KEYWORD_COS
-%token KEYWORD_DATA
-%token KEYWORD_DEF
-%token KEYWORD_DEL
-%token KEYWORD_DIM
-%token KEYWORD_DRAW
-%token KEYWORD_END
-%token KEYWORD_EXP
-%token KEYWORD_FLASH
-%token KEYWORD_FN
-%token KEYWORD_FOR
-%token KEYWORD_FRE
-%token KEYWORD_GET
-%token KEYWORD_GOSUB
-%token KEYWORD_GOTO
-%token KEYWORD_GR
-%token KEYWORD_HCOLOR_EQUAL
-%token KEYWORD_HGR
-%token KEYWORD_HGR2
-%token KEYWORD_HIMEM_COLON
-%token KEYWORD_HLIN
-%token KEYWORD_HOME
-%token KEYWORD_HPLOT
-%token KEYWORD_HTAB
-%token KEYWORD_IF
-%token KEYWORD_IN_NUMBER
-%token KEYWORD_INPUT
-%token KEYWORD_INT
-%token KEYWORD_INVERSE
-%token KEYWORD_LEFT_DOLLAR
-%token KEYWORD_LEN
-%token KEYWORD_LET
-%token KEYWORD_LIST
-%token KEYWORD_LOAD
-%token KEYWORD_LOG
-%token KEYWORD_LOMEM_COLON
-%token KEYWORD_MID_DOLLAR
-%token KEYWORD_NEW
-%token KEYWORD_NEXT
-%token KEYWORD_NORMAL
-%token KEYWORD_NOT
-%token KEYWORD_NOTRACE
-%token KEYWORD_ON
-%token KEYWORD_ONERR
-%token KEYWORD_OR
-%token KEYWORD_PDL
-%token KEYWORD_PEEK
-%token KEYWORD_PLOT
-%token KEYWORD_POKE
-%token KEYWORD_POP
-%token KEYWORD_POS
-%token KEYWORD_PR_NUMBER
-%token KEYWORD_PRINT
-%token KEYWORD_READ
-%token KEYWORD_RECALL
-%token KEYWORD_REM
-%token KEYWORD_RESTORE
-%token KEYWORD_RESUME
-%token KEYWORD_RETURN
-%token KEYWORD_RIGHT_DOLLAR
-%token KEYWORD_SAVE
-%token KEYWORD_SCALE_EQUAL
-%token KEYWORD_SCRN_LPAREN
-%token KEYWORD_SGN
-%token KEYWORD_SHLOAD
-%token KEYWORD_SIN
-%token KEYWORD_SPC_LPAREN
-%token KEYWORD_SPEED_EQUAL
-%token KEYWORD_SQR
-%token KEYWORD_STEP
-%token KEYWORD_STOP
-%token KEYWORD_STORE
-%token KEYWORD_STR_DOLLAR
-%token KEYWORD_TAB_LPAREN
-%token KEYWORD_TAN
-%token KEYWORD_TEXT
-%token KEYWORD_THEN
-%token KEYWORD_TO
-%token KEYWORD_TRACE
-%token KEYWORD_USR
-%token KEYWORD_VAL
-%token KEYWORD_VLIN
-%token KEYWORD_VTAB
-%token KEYWORD_WAIT
-%token KEYWORD_XDRAW
-%token KEYWORD_XPLOT
%token INT_LITERAL
%token FLOAT_LITERAL
%token OPERATOR_GE
%token OPERATOR_NE
%token REM_TEXT
%token STR_LITERAL
+%token TOKEN_END 128
+%token TOKEN_FOR 129
+%token TOKEN_NEXT 130
+%token TOKEN_DATA 131
+%token TOKEN_INPUT 132
+%token TOKEN_DEL 133
+%token TOKEN_DIM 134
+%token TOKEN_READ 135
+%token TOKEN_GR 136
+%token TOKEN_TEXT 137
+%token TOKEN_PR_HASH 138
+%token TOKEN_IN_HASH 139
+%token TOKEN_CALL 140
+%token TOKEN_PLOT 141
+%token TOKEN_HLIN 142
+%token TOKEN_VLIN 143
+%token TOKEN_HGR2 144
+%token TOKEN_HGR 145
+%token TOKEN_HCOLOR_EQUAL 146
+%token TOKEN_HPLOT 147
+%token TOKEN_DRAW 148
+%token TOKEN_XDRAW 149
+%token TOKEN_HTAB 150
+%token TOKEN_HOME 151
+%token TOKEN_ROT_EQUAL 152
+%token TOKEN_SCALE_EQUAL 153
+%token TOKEN_SHLOAD 154
+%token TOKEN_TRACE 155
+%token TOKEN_NOTRACE 156
+%token TOKEN_NORMAL 157
+%token TOKEN_INVERSE 158
+%token TOKEN_FLASH 159
+%token TOKEN_COLOR_EQUAL 160
+%token TOKEN_POP 161
+%token TOKEN_VTAB 162
+%token TOKEN_HIMEM_COLON 163
+%token TOKEN_LOMEM_COLON 164
+%token TOKEN_ONERR 165
+%token TOKEN_RESUME 166
+%token TOKEN_RECALL 167
+%token TOKEN_STORE 168
+%token TOKEN_SPEED_EQUAL 169
+%token TOKEN_LET 170
+%token TOKEN_GOTO 171
+%token TOKEN_RUN 172
+%token TOKEN_IF 173
+%token TOKEN_RESTORE 174
+%token TOKEN_AMPERSAND 175
+%token TOKEN_GOSUB 176
+%token TOKEN_RETURN 177
+%token TOKEN_REM 178
+%token TOKEN_STOP 179
+%token TOKEN_ON 180
+%token TOKEN_WAIT 181
+%token TOKEN_LOAD 182
+%token TOKEN_SAVE 183
+%token TOKEN_DEF 184
+%token TOKEN_POKE 185
+%token TOKEN_PRINT 186
+%token TOKEN_CONT 187
+%token TOKEN_LIST 188
+%token TOKEN_CLEAR 189
+%token TOKEN_GET 190
+%token TOKEN_NEW 191
+%token TOKEN_TAB_LPAREN 192
+%token TOKEN_TO 193
+%token TOKEN_FN 194
+%token TOKEN_SPC_LPAREN 195
+%token TOKEN_THEN 196
+%token TOKEN_AT 197
+%token TOKEN_NOT 198
+%token TOKEN_STEP 199
+%token TOKEN_PLUS 200
+%token TOKEN_MINUS 201
+%token TOKEN_ASTERISK 202
+%token TOKEN_SLASH 203
+%token TOKEN_CARET 204
+%token TOKEN_AND 205
+%token TOKEN_OR 206
+%token TOKEN_GREATER_THAN 207
+%token TOKEN_EQUAL 208
+%token TOKEN_LESS_THAN 209
+%token TOKEN_SGN 210
+%token TOKEN_INT 211
+%token TOKEN_ABS 212
+%token TOKEN_USR 213
+%token TOKEN_FRE 214
+%token TOKEN_SCRN_LPAREN 215
+%token TOKEN_PDL 216
+%token TOKEN_POS 217
+%token TOKEN_SQR 218
+%token TOKEN_RND 219
+%token TOKEN_LOG 220
+%token TOKEN_EXP 221
+%token TOKEN_COS 222
+%token TOKEN_SIN 223
+%token TOKEN_TAN 224
+%token TOKEN_ATN 225
+%token TOKEN_PEEK 226
+%token TOKEN_LEN 227
+%token TOKEN_STR_DOLLAR 228
+%token TOKEN_VAL 229
+%token TOKEN_ASC 230
+%token TOKEN_CHR_DOLLAR 231
+%token TOKEN_LEFT_DOLLAR 232
+%token TOKEN_RIGHT_DOLLAR 233
+%token TOKEN_MID_DOLLAR 234
%token VARIABLE_NAME
-%left KEYWORD_OR
-%left KEYWORD_AND
-%left '<' '=' '>' OPERATOR_GE OPERATOR_LE OPERATOR_NE
-%left '+' '-'
-%left '*' '/'
-%left '^'
-%right UNARY KEYWORD_NOT
+%left TOKEN_OR
+%left TOKEN_AND
+%left TOKEN_LESS_THAN TOKEN_EQUAL TOKEN_GREATER_THAN OPERATOR_GE OPERATOR_LE OPERATOR_NE
+%left TOKEN_PLUS TOKEN_MINUS
+%left TOKEN_ASTERISK TOKEN_SLASH
+%left TOKEN_CARET
+%right UNARY TOKEN_NOT
%%
statement_opt
:
- | %space (?E{t_def.StatementLet}lvalue '=' rvalue)
- | %space (?E{t_def.StatementLet}KEYWORD_LET lvalue '=' rvalue)
- | %space (?E{t_def.StatementPrint, semicolon = False}KEYWORD_PRINT print_item_list0)
- | %space (?E{t_def.StatementPrint, semicolon = True}KEYWORD_PRINT print_item_list1)
- | %space (?E{t_def.StatementGoto}KEYWORD_GOTO INT_LITERAL)
- | %space (?E{t_def.StatementIf}KEYWORD_IF rvalue KEYWORD_THEN) statement_opt
- | %space (?E{t_def.StatementIf}KEYWORD_IF rvalue KEYWORD_THEN) %space (?E{t_def.StatementGoto}INT_LITERAL)
- | %space (?E{t_def.StatementEnd}KEYWORD_END)
- | %space (?E{t_def.StatementGosub}KEYWORD_GOSUB INT_LITERAL)
- | %space (?E{t_def.StatementReturn}KEYWORD_RETURN)
- | %space (?E{t_def.StatementFor}KEYWORD_FOR VARIABLE_NAME '=' rvalue KEYWORD_TO rvalue)
- | %space (?E{t_def.StatementFor}KEYWORD_FOR VARIABLE_NAME '=' rvalue KEYWORD_TO rvalue KEYWORD_STEP rvalue)
- | %space (?E{t_def.StatementNext}KEYWORD_NEXT)
- | %space (?E{t_def.StatementNext}KEYWORD_NEXT VARIABLE_NAME)
- | %space (?E{t_def.StatementRead}KEYWORD_READ lvalue_list)
- | %space (?E{t_def.StatementRestore}KEYWORD_RESTORE)
- | %space (?E{t_def.StatementRestore}KEYWORD_RESTORE INT_LITERAL)
- | %space (?E{t_def.StatementData}KEYWORD_DATA data_item_list)
- | %space (?E{t_def.StatementHome}KEYWORD_HOME)
- | %space (?E{t_def.StatementNormal}KEYWORD_NORMAL)
- | %space (?E{t_def.StatementInverse}KEYWORD_INVERSE)
- | %space (?E{t_def.StatementFlash}KEYWORD_FLASH)
- | %space (?E{t_def.StatementHTab}KEYWORD_HTAB rvalue)
- | %space (?E{t_def.StatementVTab}KEYWORD_VTAB rvalue)
- | %space (?E{t_def.StatementGet}KEYWORD_GET lvalue)
- | %space (?E{t_def.StatementInput}KEYWORD_INPUT lvalue)
- | %space (?E{t_def.StatementInput}KEYWORD_INPUT STR_LITERAL ';' lvalue)
- | %space (?E{t_def.StatementDim}KEYWORD_DIM dim_item_list)
- | %space (?E{t_def.StatementPoke}KEYWORD_POKE rvalue ',' rvalue)
- | %space (?E{t_def.StatementCall}KEYWORD_CALL rvalue)
- | %space (?E{t_def.StatementText}KEYWORD_TEXT)
- | %space (?E{t_def.StatementGr}KEYWORD_GR)
- | %space (?E{t_def.StatementColorEqual}KEYWORD_COLOR_EQUAL rvalue)
- | %space (?E{t_def.StatementPlot}KEYWORD_PLOT rvalue ',' rvalue)
- | %space (?E{t_def.StatementHLin}KEYWORD_HLIN rvalue ',' rvalue KEYWORD_AT rvalue)
- | %space (?E{t_def.StatementVLin}KEYWORD_VLIN rvalue ',' rvalue KEYWORD_AT rvalue)
- | %space (?E{t_def.StatementRem}KEYWORD_REM REM_TEXT)
+ | %space (?E{t_def.StatementLet}lvalue TOKEN_EQUAL rvalue)
+ | %space (?E{t_def.StatementLet}TOKEN_LET lvalue TOKEN_EQUAL rvalue)
+ | %space (?E{t_def.StatementPrint, semicolon = False}TOKEN_PRINT print_item_list0)
+ | %space (?E{t_def.StatementPrint, semicolon = True}TOKEN_PRINT print_item_list1)
+ | %space (?E{t_def.StatementGoto}TOKEN_GOTO INT_LITERAL)
+ | %space (?E{t_def.StatementIf}TOKEN_IF rvalue TOKEN_THEN) statement_opt
+ | %space (?E{t_def.StatementIf}TOKEN_IF rvalue TOKEN_THEN) %space (?E{t_def.StatementGoto}INT_LITERAL)
+ | %space (?E{t_def.StatementEnd}TOKEN_END)
+ | %space (?E{t_def.StatementGosub}TOKEN_GOSUB INT_LITERAL)
+ | %space (?E{t_def.StatementReturn}TOKEN_RETURN)
+ | %space (?E{t_def.StatementFor}TOKEN_FOR VARIABLE_NAME TOKEN_EQUAL rvalue TOKEN_TO rvalue)
+ | %space (?E{t_def.StatementFor}TOKEN_FOR VARIABLE_NAME TOKEN_EQUAL rvalue TOKEN_TO rvalue TOKEN_STEP rvalue)
+ | %space (?E{t_def.StatementNext}TOKEN_NEXT)
+ | %space (?E{t_def.StatementNext}TOKEN_NEXT VARIABLE_NAME)
+ | %space (?E{t_def.StatementRead}TOKEN_READ lvalue_list)
+ | %space (?E{t_def.StatementRestore}TOKEN_RESTORE)
+ | %space (?E{t_def.StatementRestore}TOKEN_RESTORE INT_LITERAL)
+ | %space (?E{t_def.StatementData}TOKEN_DATA data_item_list)
+ | %space (?E{t_def.StatementHome}TOKEN_HOME)
+ | %space (?E{t_def.StatementNormal}TOKEN_NORMAL)
+ | %space (?E{t_def.StatementInverse}TOKEN_INVERSE)
+ | %space (?E{t_def.StatementFlash}TOKEN_FLASH)
+ | %space (?E{t_def.StatementHTab}TOKEN_HTAB rvalue)
+ | %space (?E{t_def.StatementVTab}TOKEN_VTAB rvalue)
+ | %space (?E{t_def.StatementGet}TOKEN_GET lvalue)
+ | %space (?E{t_def.StatementInput}TOKEN_INPUT lvalue)
+ | %space (?E{t_def.StatementInput}TOKEN_INPUT STR_LITERAL ';' lvalue)
+ | %space (?E{t_def.StatementDim}TOKEN_DIM dim_item_list)
+ | %space (?E{t_def.StatementPoke}TOKEN_POKE rvalue ',' rvalue)
+ | %space (?E{t_def.StatementCall}TOKEN_CALL rvalue)
+ | %space (?E{t_def.StatementText}TOKEN_TEXT)
+ | %space (?E{t_def.StatementGr}TOKEN_GR)
+ | %space (?E{t_def.StatementColorEqual}TOKEN_COLOR_EQUAL rvalue)
+ | %space (?E{t_def.StatementPlot}TOKEN_PLOT rvalue ',' rvalue)
+ | %space (?E{t_def.StatementHLin}TOKEN_HLIN rvalue ',' rvalue TOKEN_AT rvalue)
+ | %space (?E{t_def.StatementVLin}TOKEN_VLIN rvalue ',' rvalue TOKEN_AT rvalue)
+ | %space (?E{t_def.StatementRem}TOKEN_REM REM_TEXT)
;
print_item_list0
print_item
: rvalue
- | %space (?E{t_def.RValueTabLParen}KEYWORD_TAB_LPAREN rvalue ')')
+ | %space (?E{t_def.RValueTabLParen}TOKEN_TAB_LPAREN rvalue ')')
;
lvalue_list
| %space (?E{t_def.RValueStrLiteral}STR_LITERAL)
| %space (?E{t_def.RValueFloatLiteral}FLOAT_LITERAL)
| %space (?E{t_def.RValueIntLiteral}INT_LITERAL)
- | %space (?E{t_def.RValueNot}KEYWORD_NOT rvalue)
- | %space (?E{t_def.RValueSign, sign = 1}'+' rvalue) %prec UNARY
- | %space (?E{t_def.RValueSign, sign = -1}'-' rvalue) %prec UNARY
- | %space (?E{t_def.RValuePower}rvalue '^' rvalue)
- | %space (?E{t_def.RValueDivide}rvalue '/' rvalue)
- | %space (?E{t_def.RValueMultiply}rvalue '*' rvalue)
- | %space (?E{t_def.RValueSubtract}rvalue '-' rvalue)
- | %space (?E{t_def.RValueAdd}rvalue '+' rvalue)
+ | %space (?E{t_def.RValueNot}TOKEN_NOT rvalue)
+ | %space (?E{t_def.RValueSign, sign = 1}TOKEN_PLUS rvalue) %prec UNARY
+ | %space (?E{t_def.RValueSign, sign = -1}TOKEN_MINUS rvalue) %prec UNARY
+ | %space (?E{t_def.RValuePower}rvalue TOKEN_CARET rvalue)
+ | %space (?E{t_def.RValueDivide}rvalue TOKEN_SLASH rvalue)
+ | %space (?E{t_def.RValueMultiply}rvalue TOKEN_ASTERISK rvalue)
+ | %space (?E{t_def.RValueSubtract}rvalue TOKEN_MINUS rvalue)
+ | %space (?E{t_def.RValueAdd}rvalue TOKEN_PLUS rvalue)
| %space (?E{t_def.RValueNE}rvalue OPERATOR_NE rvalue)
| %space (?E{t_def.RValueLE}rvalue OPERATOR_LE rvalue)
| %space (?E{t_def.RValueGE}rvalue OPERATOR_GE rvalue)
- | %space (?E{t_def.RValueGT}rvalue '>' rvalue)
- | %space (?E{t_def.RValueEqual}rvalue '=' rvalue)
- | %space (?E{t_def.RValueLT}rvalue '<' rvalue)
- | %space (?E{t_def.RValueAnd}rvalue KEYWORD_AND rvalue)
- | %space (?E{t_def.RValueOr}rvalue KEYWORD_OR rvalue)
- | %space (?E{t_def.RValueStrDollar}KEYWORD_STR_DOLLAR '(' rvalue ')')
- | %space (?E{t_def.RValueVal}KEYWORD_VAL '(' rvalue ')')
- | %space (?E{t_def.RValuePeek}KEYWORD_PEEK '(' rvalue ')')
+ | %space (?E{t_def.RValueGT}rvalue TOKEN_GREATER_THAN rvalue)
+ | %space (?E{t_def.RValueEqual}rvalue TOKEN_EQUAL rvalue)
+ | %space (?E{t_def.RValueLT}rvalue TOKEN_LESS_THAN rvalue)
+ | %space (?E{t_def.RValueAnd}rvalue TOKEN_AND rvalue)
+ | %space (?E{t_def.RValueOr}rvalue TOKEN_OR rvalue)
+ | %space (?E{t_def.RValueStrDollar}TOKEN_STR_DOLLAR '(' rvalue ')')
+ | %space (?E{t_def.RValueVal}TOKEN_VAL '(' rvalue ')')
+ | %space (?E{t_def.RValuePeek}TOKEN_PEEK '(' rvalue ')')
;
lvalue