■■BF*K(Ver. 1.2.2009.0507) Readme ■■■■■■■■■■■■■■■■■■■■■■ ■■作成 2009/02/16 LIUNQA ■■改定 2009/02/22 LIUNQA ■■改定 2009/05/07 LIUNQA ■■ ■■URL: http://homepage2.nifty.com/~liunqa/ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■BF*Kについて BF*Kは以下の難解プログラミング言語のインタプリタです。 ・Brainf*ck言語 ・てってってー言語(Brainf*ckの派生言語) ・Grass言語 それぞれの言語の詳細に関しては下記のURLのサイトを参照ください。 ●Brainf*ck言語 Brainfuck - Wikipedia http://ja.wikipedia.org/wiki/Brainfuck -- 上記からの引用 ここから ---------------------- Brainfuckの言語仕様 実行可能な命令は「8つ」のみである。 1. > ポインタをインクリメントする。ポインタをptrとすると、C言語の「ptr++;」に相当する。 2. < ポインタをデクリメントする。C言語の「ptr--;」に相当。 3. + ポインタが指す値をインクリメントする。C言語の「(*ptr)++;」に相当。 4. - ポインタが指す値をデクリメントする。C言語の「(*ptr)--;」に相当。 5. . ポインタが指す値を出力する。C言語の「putchar(*ptr);」に相当。 6. , 1バイトを入力してポインタが指す値に代入する。C言語の「*ptr=getchar();」に相当。 7. [ ポインタが指す値が0なら、対応する ] の直後までジャンプする。C言語の「while(*ptr){」に相当。 8. ] ポインタが指す値が0でないなら、対応する [ にジャンプする。C言語の「}」に相当。 -- 上記からの引用 ここまで ---------------------- ●てってってー言語 プログラム言語「てってってー」 - H.Hiroのチラシの裏の裏 http://kugyu.info/?page=%A5%D7%A5%ED%A5%B0%A5%E9%A5%E0%B8%C0%B8%EC%A1%D6%A4%C6%A4%C3%A4%C6%A4%C3%A4%C6%A1%BC%A1%D7 -- 上記からの引用 ここから ---------------------- 仕様 B:サイズが無限にある(注:実際の上限はメモリに依存)、Unicode文字(1文字2バイト)を格納する配列。添字は0起点とし、初期値はすべて0である。 P:ポインタ変数。初期値は0である。 S:ソースコード上の位置を格納するスタック。 ただし、B[P]でBのP番目の値(0〜65535)を示す。 ソースコードを先頭から読み込み、以下のいずれかの文字列に合致したら、それに応じた処理を行います。 「ー」に一致(注:長音記号) ソースコード中に次に「てー」が現れるまでの文字列をすべて、B[P]を起点にして書き込む。Pの値は、最後の文字を書き込んだ1つ後ろへ移動する。(例:Pが10のときに6文字書き込んだ場合、Pは16に変わる。) 「ててー」に一致 B[P]の値を1増やす。(Brainf*ckの「+」) 「てっー」に一致 B[P]の値を1減らす。(Brainf*ckの「-」) 「てってー」に一致 Pの値を1増やす。(Brainf*ckの「>」) 「てっててー」に一致 Pの値を1減らす。Pが0のときに用いるとエラーとなる。(Brainf*ckの「<」) 「てってっー」に一致 B[P]の値を標準出力に出力したのち、Pの値を1増やす。(Brainf*ckの「.」+「>」) 「てってってー」に一致 標準入力から1文字読み込み、B[P]に書き込んだのち、Pの値を1増やす。(Brainf*ckの「,」+「>」) 「てってっててー」に一致 B[P]の値が0なら、次に「てってってっー」が現れるまでソースコードを読み飛ばし、その次の文字からソースコードの解析を再開する。そうでなければ、この「てってっててー」のソースコード上での次の文字の位置を、Sの先頭に追加する。これはループ処理を行うのに用いる。(Brainf*ckの「[」) 「てってってっー」に一致 Sの先頭にある、ソースコード上の文字の位置を示す値を除去し、その除去した値の位置からソースコードの解析を再開する。Sが空の場合はエラーとなる。(Brainf*ckの「]」) ソースコード中で特別扱いされる文字など スペース(全角・半角)・タブ・改行・BOM  「ー」〜「てー」の間を除き、一切無視される。「ー」〜「てー」の間ではそのままリテラルの文字として扱われる。 「\xAB」「\uABCD」「\dABCDE」  「ー」〜「てー」の間でのみ利用できる。エスケープシーケンスとして、それ全体で1文字と扱われる。  ・「\xAB」は、2桁の十六進数の整数(0〜255)を示す。  ・「\uABCD」は、4桁の十六進数の整数(0〜65535)を示す。  ・「\dABCDE」は、5桁の十六進数の整数(0〜65535)を示す。範囲外の値(例:\d70000)を指定した場合はエラーとなる。  ・いずれも、桁数を減らすことは出来ません(例えば、「hoge\d1234piyo」は「hoge\d01234piyo」とは等価とならず、文法エラーとなります。) 「{」〜「}」(半角のみ)  コメントと扱われる。 -- 上記からの引用 ここまで ---------------------- 上記以外に2009/04/07に公開されたBrainf*ck表記にVer.1.2より対応しました。 ●Grass言語 ちょっと草植えときますね型言語 Grass 英語版: http://www.blue.sky.or.jp/grass/ 日本語版: http://www.blue.sky.or.jp/grass/doc_ja.html 詳細はとてもここでは説明しきれません。上記サイトを参照ください。 ■動作環境 <Windows Mobile版> ・Windows Mobile 2003 software for Pocket PC Standard Edition ・Windows Mobile 2003 Second Edition software for Pocket PC ・Windows Mobile 5.0 software for Pocket PCs ・Windows Mobile 6 / 6.1 Professional / Classic <Windows版> ・Windows XP  (他のWindowsでは動作確認できていません。) ■インストール方法 <Windows Mobile版> 当サイトのページからダウンロードしたCABファイルをモバイルデバイスにて実行します。 <Windows版> 当サイトのページからダウンロードしたLZH形式の圧縮ファイルを解凍してください。 特にインストーラは用意していません。 ■インストール内容 <Windows Mobile版> モバイルデバイスへインストールされるファイル (インストール先が\Program Files\bfakの場合) ・\Program Files\bfak\bfak.exe ・\Program Files\bfak\bfak.ini  (初回起動時作成) ・\Program Files\bfak\readme.txt ・\Windows\スタート メニュー\プログラム\BFaK.lnk ・\My Documents\hello-world.txt  (Brainf*ck,てってってー言語の例) ・\My Documents\tettette.txt   (てってってー言語の例) <Windows版> ・bfak.exe ・readme.txt ・bfak.ini  (初回起動時作成) ・hello-world.txt  (Brainf*ck,てってってー言語の例) ・tettette.txt   (てってってー言語の例) ■アンインストール <Windows Mobile版> 「プログラムの削除」から「LIUNQA bfak」を選択して「削除」します。 <Windows版> 解凍したファイルを削除してください。 ■操作 <メイン画面> ・タイトル 現在選択されているインタプリタをあらわします。 「Brainf*ck」、「てってってー」、または、「Grass」。 ・実行ボタンおよびメニュー ソーステキストボックスにあるプログラムを実行します。 ・入出力 入力テキストボックスには実行前に入力値を記入しておきます。 出力テキストボックス(読み取り専用)には実行結果が表示されます。 ・読込みメニュー 選択したファイルの内容をソーステキストボックスに読込みます。 ・保存メニュー ソーステキストボックスの内容を指定したファイルに保存します。 ・クリアメニュー ソース、入力、出力のテキストボックスの内容を空にします。 ・Brainf*ckメニュー インタプリタを「Brainf*ck」言語に変更します。 ・てってってーメニュー インタプリタを「てってってー」言語に変更します。 ・Grassメニュー インタプリタを「Grass」言語に変更します。 ・言語仕様ボタンおよび言語仕様メニュー 選択されているインタプリタに応じた言語仕様を表示します。 ・オプションメニュー オプション画面を表示します。 ・バージョン情報メニュー バージョン情報ダイアログを表示します。 ・終了ボタンおよびメニュー BF*Kを終了します。 ・↓キー 実行中の処理を中断したい場合、「↓」キーを押下し続けます。押下し続けると、中断を問い合わせるメッセージが表示されます。 <オプション画面> ・出力文字コード 実行時の出力文字コードとして以下のうちのいずれかを指定します。  - Unicode  - SJIS  - UTF-8 通常は「Unicode」を選択します。出力結果が文字コードに依存する場合、適切な文字コードに変更します。 ■注意事項 ・上記の「ちょっと草植えときますね型言語 Grass」サイトにて公開されている「はいはいわろすわろす」のサンプルを実行する場合、オプション画面の出力文字コードにて「SJIS」を設定してから実行してください。 ・実行時、メモリが不足する場合、「Out of Memory」のエラーメッセージが表示されることがあります。エラーメッセージは主にWindows MobileでGrass言語実行時に表示される可能性が高いです。この場合、Windows版で実行するか、処理内容を見直してください。 ■既知の問題および制限事項 ・てってってー言語にてループの入れ子は40までです。 ■履歴 2009/05/07 Ver.1.2.2009.0507 【新規サポート】 ・Windows版をサポート。 ・Grass言語をサポート。 ・てってってー言語にて、2009/04/07に公開された仕様に対応。 ・出力時の文字コードを設定できるように対応。 【改善】 ・実行中、カーソルを砂時計に変更。 ・「読込み」、「保存」メニューの末尾に「...」を追加。 ・メニュー構成を変更。 【不具合修正】 なし。 2009/02/22 Ver.1.1.2009.0222 【新規サポート】 ・実行中、「↓」にて処理を中断する機能を追加。 ・言語ヘルプボタンを追加。 ・処理終了時、メッセージを表示するように変更。 【改善】 ・読込んだファイル名を記憶するように修正。 ・出力領域のクリアを実行開始直後に変更。 ・言語仕様のメッセージの内容修正。 ・実行時のエラーメッセージの内容修正。 【不具合修正】 ・てってってー言語の「てってってっー」について、仕様を誤認していたため修正。 ・作業領域および出力領域の長さが100文字を越えると処理が不正となる不具合を修正。 ・readmeにてWindows Mobile 6.0をWindows Mobile 6に変更。 ・readmeにて動作環境にPPC 2003を追加。 2009/02/16 Ver.1.0.2009.0216 新規公開。 ■利用及び転載について 本プログラムはフリーソフトですが、著作権は作者(LIUNQA)が保有します。 本プログラムを利用した結果につきましては、作者は一切の責務を負えませんのでご了承下さい。また、不具合等に関しては、なるべく対応するつもりですが、その義務を負うものではありません。 また、内容の改変等が無い限り本テキストを添付しての転載は自由です。ただし雑誌、書籍等の付録ディスク等への収録については必ず事前にメール等で確認をとって下さい。 ■ご意見、ご要望について 本プログラムに関するご意見、ご要望がありましたらお手数ですがliunqa@hotmail.comにまでメールをお願いします。ご希望に応えられるかはわかりませんが努力したいと思います。 −以上−