« 【チラシのうら 1日目】思い付きでBASICインタプリタを作り始めました。 | トップページ | 【チラシのうら 3日目】計算してみる »

2026年6月17日 (水)

【チラシのうら 2日目】まずは…変数?

TinyBASICだと変数はA~Zまでの26しかないのですが、これは物凄い制限なので、変数名は23文字(C言語だと末尾にnullが付くので使用でき長さが領域より1文字短い)で256個まで使用可能としましょう。

変数の種類は
% : 整数(int)
! : 単精度実数(float)
# : 倍精度実数(double)
$ : 文字列
省略時は 単精度整数(float)とする。

文字列領域に4KByteを割り当て、足りなくなったらガベージコレクションを行う予定です。

まず、入力した行をトークンに分解する必要があります。
トークン分割と変数管理を作って単純な代入文が実行できるようにします。
代入文の実行結果を確認出来ないと意味がないので、MEMDUMP命令とPRINT命令も作成します。
PRINT命令はPRINTの後に続く定数または変数を表示する機能しかない簡易版です。

参考書は

スクリプトエンジン プログラミング
いまどきのプログラム言語の作り方
WEB+DB PRESS Vol.125
Interface 2022年 7月号

Image_20260617142001

妄想に成りつつあっただけああって発行年が古いです。

入出力はシリアルモニターを使用して行います。



------------------------
M5Z-80 BASIC Ver.0.1
------------------------
READY.

---- utf8 でエンコードされたメッセージを送信しました: "A=123" ----
A=123
-- Dump Tokens
tokenCount=4
00 : TK_IDENT [A]
01 : TK_EQUAL [=]
02 : TK_NUMBER [123]
03 : TK_EOL []

--- Search valueType=FLOAT, varName=A, len(varName)=1, searchVarName=A
--- alloc ValueData
valueDataCount=0 , valueType=1 , varName=A
READY.

---- utf8 でエンコードされたメッセージを送信しました: "memdump" ----
memdump
CmdExec: cmdId=4

--- VALUE DUMP : valueDataCount=1
varName=A valueType=FLOAT value=123.00
READY.

---- utf8 でエンコードされたメッセージを送信しました: "print A" ----
print A
-- Dump Tokens
tokenCount=3
00 : TK_IDENT [PRINT]
01 : TK_IDENT [A]
02 : TK_EOL []

CmdExec: cmdId=2
--- Search valueType=FLOAT, varName=A, len(varName)=1, searchVarName=A
valueType=1 , varName=A
123
READY.


デバック表示で色々出てますが、デバック表示なしだと、コレが出来るようになっただけの段階です。


------------------------
M5Z-80 BASIC Ver.0.1
------------------------
READY.

A=123
READY.

print A
123
READY.


ここまでの成果

  • トークン分割が出来た
  • 変数が扱えるようになった
  • 変数への代入が出来るようになった

※現在のPRINT文はデバック用なのでノーカウント

|

« 【チラシのうら 1日目】思い付きでBASICインタプリタを作り始めました。 | トップページ | 【チラシのうら 3日目】計算してみる »

BASIC」カテゴリの記事

コメント

この記事へのコメントは終了しました。