Cat Lab 作品:My BASIC Interpreter
”My BASIC Interpreter”はコマンドラインのBASIC言語インタプリタです。式評価アプリケーションとしても使えます。結果を stdout へ出力し、0を戻します。エラーがあったら、エラーメッセージを stderr へ出力し、1を戻します。
使い方:
mybasic -e <式>
又は
mybasic -f <BASICプログラムのファイル名>
以下のURLで無料でダウンロードできます:
My BASIC Interpreter をダウンロード
プログラム例(test.bas):
function mySum (byval x as integer) as integer
	if x <= 1 then
		return x
	else
		return x + mySum(x - 1)
	end if
end function
print mysum(100)
スペックは以下となります:
式評価アプリケーション
式は BASIC 言語のシンタックスで書きます。算術、文字列、関係、論理計算はサポートされます。
データ型
- boolean
 - integer
 - double
 - string
 
演算子
- 数学演算子: ^, +(単項演算子), -(単項演算子), *, /, \, MOD, +, -
 - 文字列演算子: +
 - 関係演算子: =, <>, <, <=, >, >=
 - 論理演算子: NOT, AND, OR
 - その他: (, ) (丸括弧、演算子の優先順位を変更するため)
 
数学関数
- abs
 - sign
 - int
 - sqrt
 - exp
 - log
 - log10
 - rad:角度を弧度に
 - deg:弧度を角度に
 - sin
 - cos
 - tan
 - asin
 - acos
 - atan
 - sinh
 - cosh
 - tanh
 - asinh
 - acosh
 - atanh
 - sec
 - csc
 - pi:円周率を戻す
 - random:[0, 1]の中の乱数を戻す
 
文字列関数
- str(num):数字を文字列に
 - space(n)
 - tab(n)
 - ltrim(str)
 - rtrim(str)
 - trim(str)
 - len(str)
 - ucase(str)
 - lcase(str)
 - val(str):文字列を数字に
 - isNumeric(str)
 - left(str, n)
 - right(str, n)
 - mid(str, from, n)
 - instr(str1, str2):str2はstr1にあれば、0からのインデックスを戻す。見つけなかったら、-1を戻す。
 
BASIC言語との相違点
- 関数名が違う関数があります。例えば、”sqr”ではなく、”sqrt”です。
 - 文字列のインデックスは0からですが、1からではないです。
 - BASIC言語の type character(例えば、”2#”はdouble型の2)はサポートされていません。
 
BASIC言語インタプリタ
簡約かつ実用な BASIC シンタックスをサポートされます。
”簡約かつ実用な BASIC シンタックス”のスペック(前述の式評価スペック以外):
サポートされているもの
- コメント:REM, '
 - 変数宣言:DIM ... AS ...
 - 条件判断(ブロックIF):IF, THEN, ELSEIF, ELSE, END IF
 - FORループ:FOR, TO, STEP, NEXT, CONTINUE FOR, EXIT FOR
 - DOループ:DO, WHILE, UNTIL, LOOP, CONTINUE DO, EXIT DO
 - 関数とプロシージャ:FUNCTION, END FUNCTION, SUB, END SUB, RETURN, BYVAL, BYREF
 - 出力:PRINT
 - その他:END
 
サポートされていないもの
- LET(一番無駄なコマンド。無視。)
 - 行号(古すぎる)
 - GOTO(諸悪の根源)
 - GUSUB...RETURN(古すぎる)
 - DEF FN(古すぎる)
 - Single-line IF
 - READ...DATA(古すぎる)
 - SELECT CASE(嫌い。でも、C++のようなswitch/caseは違いすぎる。IFを使ってください。)
 - ON [ERROR] ...(古すぎる)
 - WHILE ... WEND(古すぎる,DO ... LOOP を使ってください)
 - EXIT SUB, EXIT FUNCTION(RETURN を使ってください)
 - CALL(但し、関数はプロシージャのように直接呼び出すことが出来ます)
 - variant データ型(コード品質を低下させる)
 - ユーザー定義型(クラス)
 - PRINT USING(本当に必要なら、後で実装します)
 - ファイル I/O(OPEN など。後のバージョンには、新しいファイルI/O関数を実装します。)
 
普通のBASIC言語との主な相違点
- 変数は使う前、(DIMで)宣言しなければいけない(VB の”OPTIONAL EXPLICIT”と同じ)
 - ”DIM a, b, c AS DOUBLE”は良いですが、”DIM a AS INTEGER, b AS DOUBLE”は駄目(コード品質向上のため)
 - Boolean型和Integer型は転換出来ません(コード品質向上のため)
 - 関数又はプロシージャ:引数の引数の値渡しと参照渡し(BYVAL と BYREF)を指定しなければいけない(コード品質向上のため)
 - PRINT ステートメント:
	
- ”,”はタブをプリントする意味になります(元々の仕様は古すぎる、あまり意味がない)
	
 - 数字の前は、自動的に空白を挿入しません(必要の時、プログラマーはこうやるべき)
	
 
 
未だサポートされていないもの(後のバージョンに実装する予定)
データ型
- 配列(多次元)
	
- 配列のインデックスは常に0から
	
 - ”DIM A(N) AS INTEGER”には、N は配列の大きさです。一番大きなインデックス(N - 1)ではないです。
	
 
 - date
 - time
 - datetime
 
内部関数
- 統計に関する関数
 - アルゴリズム
 - ファイル I/O
 - 相互運用性(?)
 
コマンド
ライセンス
このソフトのライセンスは”HSL”です。無料で使用と配布は出来ます(有料配布不可)。バッグがあれば、気軽に教えてください。
このソフトは役立ちため、作者を感謝したい場合は、他の援助の必要な人を助けって下さい。又は、以下のような人間や動物や環境を保護する団体に寄付してください: