プログラミングのメモ帳(C/C++/HSP)

日々のプログラミングで気づいた点や小技集を紹介します。(Windows 10/XP/Vista、VC2017、HSP)

趣味でBASIC言語を作ってみる(2)

2008年04月20日 15時16分00秒 | その他
扱えるステートメント(命令)を考える。

まずは基本命令、宣言命令、制御命令について決めます。

§基本命令

○REM

'コメント
REM コメント
  • REMの次にコメントを書きます。 単純にソースを見やすくするだけの命令です。
  • (’)文字で代用できます。通常はこの文字を使用します。(推奨)



○LET

LET 変数名=値
LET 変数名=変数
LET 変数名=数式
  • 変数に値、変数、数式の結果を代入します。 N88-BASICと異なり省略できません。必ず記述します。 変数名と代入するデータ型が異なっても自動的に型変換されて代入します。



○END

END
  • プログラムを終了します。 記述しなくてもプログラムの最後に来れば自動的に終了します。
  • 複数の記述が可能です。



§宣言命令

○DEFINT

DEFINT 変数名
DEFINT 変数名, … 変数名
DEFINT 変数名 = 初期値
  • 整数型の変数を宣言します。
  • カンマ文字で区切ることで複数同時に宣言できます。
  • 整数型は32Bitの符号付き整数です。
  • 表現できる数値範囲は-2,147,483,648~+2,147,483,647まで。
  • イコールの後に初期値を記述できます。省略するとゼロで初期化。



○DEFDBL

DEFDBL 変数名
DEFDBL 変数名, … 変数名
DEFDBL 変数名 = 初期値
  • 実数型の変数を宣言します。
  • カンマ文字で区切ることで複数同時に宣言できます。
  • 実数型は64Bitの浮動小数点の実数です。
  • 表現できる数値範囲は-1.7976931348623158e+308~+1.7976931348623158e+308まで。
  • イコールの後に初期値を記述できます。省略するとゼロで初期化。



○DEFSTR

DEFSTR 変数名
DEFSTR 変数名, … 変数名
DEFSTR 変数名 = 文字列
  • 文字列型の変数を宣言します。
  • カンマ文字で区切ることで複数同時に宣言できます。
  • 文字列型は可変長サイズのシフトJISコードの文字列です。
  • 表現できるバイト数は0~65,535バイトまで。
  • イコールの後に初期値を記述できます。省略するとゼロで初期化。



○DIMINT

DIMINT 配列名[添え字]
DIMINT 配列名[添え字], … 配列名[添え字]
DIMINT 配列名[添え字] = { 初期値 }
DIMINT 配列名[添え字] = { 初期値, … 初期値 }
  • 整数型の配列を宣言します。
  • カンマ文字で区切ることで複数同時に宣言できます。
  • イコールの後に初期値を記述できます。省略するとゼロで初期化。
  • 詳しいことはDEFINTを参照して下さい。



○DIMDBL

DIMDBL 配列名[添え字]
DIMDBL 配列名[添え字], … 配列名[添え字]
  • 実数型の配列を宣言します。
  • カンマ文字で区切ることで複数同時に宣言できます。
  • イコールの後に初期値を記述できます。省略するとゼロで初期化。
  • 詳しいことはDEFDBLを参照して下さい。



○DIMSTR

DIMSTR 配列名[添え字]
DIMSTR 配列名[添え字], … 配列名[添え字]
  • 文字列型の配列を宣言します。
  • カンマ文字で区切ることで複数同時に宣言できます。
  • イコールの後に初期値を記述できます。省略するとゼロで初期化。
  • 詳しいことはDEFSTRを参照して下さい。



○配列の初期化

  • 初期値を省略するとすべてゼロで初期化します。
  • 1つだけ記述するとその値ですべてを初期化します。
  • 2つ以上記述すると先頭から記述された分だけ初期化します。
  • 配列の添え字数より初期化数が少ないと残りはゼロで埋めます。
  • 配列の添え字数より初期化数が多い場合は多い分は無視します。



○配列の次元数

  • 多次元配列を宣言できます。最大255次元まで。
  • 添え字の各サイズは1~4,294,967,295まで。
  • 1つの配列は最大4Gバイトまで。



§制御命令

○条件分岐

IF (式1)
 :
ELSEIF (式2)
 :
ELSEIF (式3)
 :
ELSE
 :
ENDIF
  • [式]の値によって処理を分岐します。
  • [:]の部分は処理(文)を記述します。
  • 基本はIF~ENDIFですがIF~ELSE~ENDIF構文も組めます。



○多重分岐

SWITCH (式)
  :
 CASE 値1:
  :
 CASE 値2:
  :
 CASE 値3:
  :
 DEFAULT:
  :
SEND
  • [式]の値によって複数の処理に分岐します。
  • [:]の部分は処理(文)を記述します。
  • DEFAULTは省略できますがCASEは省略できません。
  • N88-BASICのON GOTOに類似する機能です。



○FOR

FOR 式1 TO 式2 STEP 式3
 :
NEXT
  • [式1]は初期値です。省略不可。
  • [式2]は終了値です。省略不可。
  • [式3]は増減値です。省略可能。[式3]は絶対値で解釈されます。
  • 初期値と終了値より増減値が[増加値]か[減少値]かが決まります。



○WHILE

WHILE (式)
 :
WEND
  • [式]が[真]の間だけWHILE-WENDの処理を繰り返す。
  • [式]の条件によっては1回も処理されない事があります。
  • [:]の部分は処理(文)を記述します。



○DO-WHILE

DO
 :
WHILE (式)
  • [式]が[真]の間だけDO-WHILEの処理を繰り返す。
  • [式]の条件に関係なく最低1回は処理されます。
  • [:]の部分は処理(文)を記述します。



○DO-LOOP

DO
 :
LOOP
  • 無限ループを組みたい場合に利用します。
  • 常駐プログラムやずっと処理するソフトで利用します。
  • またはゲーム・ループなどを組む場合にも使用します。
  • IF文と組み合わせれば特定の条件でループを抜けることも出来ます。



○ループ全般

  • [式]は0のとき[偽]、0以外なら[真]と考えます。
  • 条件分岐、多重分岐は[式]が[真]のとき次の処理に移ります。
  • 繰り返し文のすべては[式]が[真]のときループ処理します。
  • ループを組むとき適当な回数でWAIT命令でウエイトを入れて下さい。



○GOTO

GOTO ラベル名
  • 無条件に[ラベル名]の場所へジャンプします。
  • ラベル名は[:]文字から始め、任意の位置に記述できます。
  • ラベル名に同じ名前を複数使えませんので一意の名前にして下さい。
  • N88-BASICと違いループ内からループ外にジャンプできます。



○BREAK

BREAK
  • 繰り返し文のすべてで利用できます。
  • IF文と組み合わせて瞬時にループを抜けるときに使用します。
  • SWITCH-SEND内で使うと瞬時にSENDの場所に移ります。



○CONTINUE

CONTINUE
  • 繰り返し文のすべてで利用できます。
  • IF文と組み合わせて瞬時にループの最後に移動するときに使用します。
  • SWITCH-SEND内で使うと瞬時にSWITCHの最初に移りもう一度[式]を評価します。



§サブルーチン命令

○SUB

SUB サブルーチン名()
{
 :
}
  • ある決まった処理をサブルーチンとして分離できます。
  • サブルーチン内で宣言された変数や宣言なしの変数は戻るときに消滅します。
  • サブルーチンからデータを呼び出し元に戻す場合は呼ぶ前に変数を確保します。
  • その後に確保した変数にデータをセットすれば戻せます。



○GOSUB

GOSUB サブルーチン名()
  • サブルーチンを呼び出します。
  • カッコは必ず付けて下さい。
  • 引数は渡せません。



○RETURN

RETURN
  • サブルーチンから呼び出し元に戻るとき使います。
  • RETURN文を使わなくてもサブルーチンから抜けると自動的に戻ります。
  • 通常はIF文と組み合わせて瞬時に戻りたい場合に利用します。



§最後に

条件分岐、多重分岐、繰り返し文はすべて中間言語のジャンプ命令に置き換わります。
変数はスタック上に積まれていきます。
サブルーチンは最大1024レベルまでネストして呼び出せます。

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 趣味でBASIC言語を作ってみる(1) | トップ | 趣味でBASIC言語を作ってみる(3) »
最新の画像もっと見る

コメントを投稿

その他」カテゴリの最新記事