プログラミング初心者御用達のプログラミング言語「BrainF*ck」
チューリング完全がどうとかは正直よくわかりませんが,「どんな計算もできる凄いもの」という感じらしいです.
とりあえずGitHub登録してVSCodeと連携して使ってみたくなったので簡単に作ってみました.
作成したソースだけ見たい方はこちら
説明
プログラミング初心者御用達とは言いましたが実際のところ,インタプリタの作成が御用達という感じですね.
内容としては使う文字は「+-><[].,」の8文字.
この8文字を変えるだけでオリジナルのプログラミング言語が作れるようなものなので,Twitterでたまに見かける「オリジナルのプログラミング言語作った」というものは大体コレです.
ソースを先頭から読んでいき,該当の文字に対しメモリ上をポインタが移動する.
初期のメモリとポインタ位置を以下のように表記する.
【0】[0][0][0][0][0][0][0][0][0][0][0][0][0][0][0]「+」の場合,そのデータをインクリメントする
【1】[0][0][0][0][0][0][0][0][0][0][0][0][0][0][0]
「-」の場合,そのデータをデクリメントする
【0】[0][0][0][0][0][0][0][0][0][0][0][0][0][0][0]
「>」の場合,ポインタを1つ+する
[0]【0】[0][0][0][0][0][0][0][0][0][0][0][0][0][0]
「<」の場合,ポインタを1つ-する
【0】[0][0][0][0][0][0][0][0][0][0][0][0][0][0][0]「[」の場合,ポインタのメモリが指すデータが0の場合は対応する]に移動する
「]」の場合,ポインタのメモリが指すデータが0でない場合は対応する[に移動する「.」の場合,ポインタのメモリが指すデータをASCIIコードで出力する
「,」の場合,ポインタのメモリが指すデータにASCIIコードで1バイト代入する
というもので,これなら作れるのかも?と思ってとりあえず作成.
ここで注意しときたいのは「[」と「]」の場合.
「[]」が入れ子になっている可能性があるため,c=0としソースを読み進む.
「[」があった場合はc += 1とし,「]」があった場合,c > 0だった場合はc -= 1とする. c = 0だった場合は対応する「]」なのでそこで終わり.
「]」の場合も同様.
というだけです.
挙動確認.
ソースはBrainfuckのサンプルコード集から拝借.
Hello, Worldのプログラム
出力
素数の列挙プログラム
出力結果