動作確認はLinuxで行っています。コンパイルはVisual C++.NETでも確認済み。
KBASICは、私がプログラミング言語の構造を学ぶために作成したものです。 再帰下降構文解析や、二分探索木などの仕組みを学ぶのにも役に立つと思います。 言語仕様はBASICに似せました。 プログラミング言語は一般的にオープンソースなものが多く、 比較的学びやすいのですが、あまりにサイズが膨大なものばかりで 学び始めの初心者には少々ツライです。 実際、私が右も左も分からない状態でgccのソースコードを読んでみても サッパリ理解できませんでした。 そこで、「1000行程度の軽いもので、かつ最低限の機能は持っている スクリプト言語があればいいのになぁ」と思ったのがきっかけで、 KBASICを作成しました。 一応、読みやすさと分かりやすさを重視して作成したつもりです。
ソースコードの詳細な解説はココで行っています
簡単な言語仕様を紹介します。 より詳しい内容は全パッケージ版をダウンロードしてください。
文字列、変数、数値を出力する。 文字列の場合は「"」(ダブルクォーテーション)で囲む。 さらに出力データを連結させるために「,」(カンマ)を使用することができる。 変数や数値はそのまま使用することができる。 文字列内で使用する制御文字は「\r \n \b \f \t」に対応している。 「\」は「\\」と記入する。
----- print.bs PRINT "Hello World!\n" PRINT "Hello World!", " by Kenji\n" x = 55 PRINT "x = ", x, ".\n" PRINT "「\\」は「\\\\」と記述する。\n" -----
数値を標準入力から受け取り、変数に格納する。
----- input.bs PRINT "Input Number: " INPUT num PRINT "Your Input is ", num, ".\n" -----
条件式が「真」の場合にTHEN以降の処理が実行される。 条件式が「偽」の場合はENDIFへ飛ばされる。 条件式には、AND、OR、NOT命令を指定することができる。
----- if.bs PRINT "Input Number: " INPUT num IF num == 5 OR num == 6 THEN PRINT "num = 5 or 6\n" ENDIF IF num > 7 AND num < 9 THEN PRINT "num = 8\n" ENDIF IF NOT num == 1 THEN PRINT "num != 1\n" ENDIF PRINT num, "\n" -----
ラベルを指定し、GOTOを使用してそのラベルの位置へ処理をジャンプする。 LABELは位置を設定するだけで、具体的な処理はしない。 GOTOはラベルの位置へジャンプする。
----- label.bs PRINT "Start Number: " INPUT x PRINT "End Number: " INPUT y PRINT "Ans: ", x, " + ... + ", y, " = " z = 0 LABEL LOOP IF x > y THEN GOTO END_OF_LOOP ENDIF z = z + x x = x + 1 GOTO LOOP LABEL END_OF_LOOP PRINT z, "\n" -----
プログラムを終了させる
----- end.bs PRINT "Input Number: " INPUT num IF num > 5 THEN PRINT num, " > 5\n" END ENDIF PRINT num, " <= 5\n" END -----
このソースコードがあなたの役に立ったならば幸いです。