hra1129 / msx_basic_compiler

MSX-BASICコンパイラ
MIT License
22 stars 2 forks source link

命令文中に計算式が存在すると、コンパイル実行時にSyntax errorとなる #3

Closed NasubiKT closed 9 months ago

NasubiKT commented 9 months ago

以下のサンプルコードをmsx_bacon.exeでコンパイルすると、40行目と50行目でSyntax Error.となります。

サンプルコード

10 SCREEN1,0,0:COLOR15,0,0:DEFINTA-Z
20 I=0:R$="":MW=&H6B:'CHAR"k"
30 SPRITE$(0)="@`pxp`@"
40 FOR I=0 TO 7:READ R$:VPOKE MW*8+I,VAL("&H"+R$):NEXT
50 PUT SPRITE0,(6*8,7*8),8,0
60 END
70 DATA 9F,DF,DF,04,F3,FB,FB,20

コンパイル結果

MSX-BACON v0.0
=========================================================
Copyright (C)2023 t.hara
  Output type: ZMA
  Output type: MSX1
  Optimization level: O2 (Code)
  Start address : 0x8010
  Stack size    : 256

Target: DEV.BAS (ASCII code).
ERROR(40): Syntax error.
ERROR(40): Syntax error.
ERROR(50): Syntax error.
ERROR(50): Syntax error.
Found 4 error(s).
hra1129 commented 9 months ago

内部で単語分解した後、40行目の MW の次の * が消滅して、8 を行番号と認識していることが判明しました。 単語分解ルーチンのバグのようです。直します。 50のエラーは、そのバグに巻き込まれた何かの可能性が高いので、40のバグを直してから。

hra1129 commented 9 months ago

MW8 の 8 をラベルと判定してしまったようです。ラベル判定処理を修正します。 おそらく、50行目の *8 もラベルと判定されていると思います。

hra1129 commented 9 months ago

直しました。 お試し下さいませ。

NasubiKT commented 9 months ago

ありがとうございます! 正常動作を確認できました。