Implement REM statement
authorNick Downing <nick@ndcode.org>
Tue, 17 May 2022 04:01:33 +0000 (14:01 +1000)
committerNick Downing <nick@ndcode.org>
Tue, 17 May 2022 04:12:12 +0000 (14:12 +1000)
applesoft_basic.l
applesoft_basic.t
applesoft_basic.y
test.bas

index 704a019..216d5bf 100644 (file)
 %}
 
 %option nodefault
+%start REM
 
 %%
 
-[ ]
-X\ *P\ *L\ *O\ *T/(\ *[A-Z0-9])*(\ *[$%])? {
-  return y_tab.KEYWORD_XPLOT
+<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])*(\ *[$%])? {
+    return y_tab.KEYWORD_DATA
+  }
+  C\ *O\ *S/(\ *[A-Z0-9])*(\ *[$%])? {
+    return y_tab.KEYWORD_COS
+  }
+  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
+  }
+  (?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.VariableName}(?E{t_def.Text.Char}[A-Z])(\ *(?E{t_def.Text.Char}[A-Z0-9])(\ *[A-Z0-9])*)?(\ *(?E{t_def.Text.Char}[$%]))?) {
+    return y_tab.VARIABLE_NAME
+  }
+  (?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.FloatLiteral}((?E{t_def.FloatLiteral.Integer}(?E{t_def.Text.Char}[0-9])(\ *(?E{t_def.Text.Char}[0-9]))*)(?E{t_def.FloatLiteral.Fraction}"")|(?E{t_def.FloatLiteral.Integer}((?E{t_def.Text.Char}[0-9])\ *)*)(?E{t_def.FloatLiteral.Fraction}\.(\ *(?E{t_def.Text.Char}[0-9]))*))(?E{t_def.FloatLiteral.Exponent}\ *E(?E{t_def.FloatLiteral.Sign}(\ *(?E{t_def.Text.Char}[+-]))?)\ *(?E{t_def.FloatLiteral.Integer}(?E{t_def.Text.Char}[0-9])(\ *(?E{t_def.Text.Char}[0-9]))*))?) {
+    return y_tab.FLOAT_LITERAL
+  }
+  \"(?E{t_def.StrLiteral}[^"\n]*)\" {
+    return y_tab.STR_LITERAL
+  }
+  \>\ *=|=\ *\> {
+    return y_tab.OPERATOR_GE
+  }
+  \<\ *=|=\ *\< {
+    return y_tab.OPERATOR_LE
+  }
+  \<\ *\>|\>\ *\< {
+    return y_tab.OPERATOR_NE
+  }
+  . {
+    return ord(yytext[0])
+  }
+  \n {
+    return ord('\n')
+  }
 }
-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])*(\ *[$%])? {
-  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])*(\ *[$%])? {
-  return y_tab.KEYWORD_DATA
-}
-C\ *O\ *S/(\ *[A-Z0-9])*(\ *[$%])? {
-  return y_tab.KEYWORD_COS
-}
-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
-}
-(?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.VariableName}(?E{t_def.Text.Char}[A-Z])(\ *(?E{t_def.Text.Char}[A-Z0-9])(\ *[A-Z0-9])*)?(\ *(?E{t_def.Text.Char}[$%]))?) {
-  return y_tab.VARIABLE_NAME
-}
-(?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.FloatLiteral}((?E{t_def.FloatLiteral.Integer}(?E{t_def.Text.Char}[0-9])(\ *(?E{t_def.Text.Char}[0-9]))*)(?E{t_def.FloatLiteral.Fraction}"")|(?E{t_def.FloatLiteral.Integer}((?E{t_def.Text.Char}[0-9])\ *)*)(?E{t_def.FloatLiteral.Fraction}\.(\ *(?E{t_def.Text.Char}[0-9]))*))(?E{t_def.FloatLiteral.Exponent}\ *E(?E{t_def.FloatLiteral.Sign}(\ *(?E{t_def.Text.Char}[+-]))?)\ *(?E{t_def.FloatLiteral.Integer}(?E{t_def.Text.Char}[0-9])(\ *(?E{t_def.Text.Char}[0-9]))*))?) {
-  return y_tab.FLOAT_LITERAL
-}
-\"(?E{t_def.StrLiteral}[^"\n]*)\" {
-  return y_tab.STR_LITERAL
-}
-\>\ *=|=\ *\> {
-  return y_tab.OPERATOR_GE
-}
-\<\ *=|=\ *\< {
-  return y_tab.OPERATOR_LE
-}
-\<\ *\>|\>\ *\< {
-  return y_tab.OPERATOR_NE
-}
-. {
-  return ord(yytext[0])
-}
-\n {
-  return ord('\n')
+
+<REM>{
+  (?E{t_def.RemText}.*) {
+    BEGIN(INITIAL)
+    return y_tab.REM_TEXT
+  }
 }
index b6e2063..d480f31 100644 (file)
@@ -80,7 +80,9 @@ class StatementColorEqual: Statement;
 class StatementPlot: Statement;
 class StatementHLin: Statement;
 class StatementVLin: Statement;
+class StatementRem: Statement;
 class DimItem: Node;
+class RemText: Node;
 class RValue: Node;
 class RValueOr: RValue;
 class RValueAnd: RValue;
@@ -489,6 +491,9 @@ def execute(self, context):
     data_types.cint(value1),
     data_types.cint(value2)
   )
+@method(StatementRem)
+def execute(self, context):
+  pass 
 del execute
 
 @method(RValue)
index 9b0a793..f11927c 100644 (file)
 %token OPERATOR_GE
 %token OPERATOR_LE
 %token OPERATOR_NE
+%token REM_TEXT
 %token STR_LITERAL
 %token VARIABLE_NAME
 
@@ -188,6 +189,7 @@ statement_opt
   | %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)
   ;
 
 print_item_list0
index 3088010..707e54c 100644 (file)
--- a/test.bas
+++ b/test.bas
@@ -7,7 +7,7 @@
 70 READ K
 70 PRINT "J"J" K"K
 80 NEXT J
-90 RESTORE 2010
+90 RESTORE 2020
 100 READ K
 110 PRINT "K"K
 120 PRINT STR$(3.14159)
@@ -25,7 +25,9 @@
 240 AR(2,3)=14
 250 PRINT AR(2,1)AR(2,2)"."AR(2,3)
 260 END
-1000 I%=I%+1
-1010 RETURN
-2000 DATA 20,30,40.5,50,60
-2010 DATA 70,80,90,100,110,120
+1000 REM SUBROUTINE
+1010 I%=I%+1
+1020 RETURN
+2000 REM DATA
+2010 DATA 20,30,40.5,50,60
+2020 DATA 70,80,90,100,110,120