みけCATのにっき(仮)
つれづれなるまゝに、日くらし、PCにむかひて、心に移りゆくよしなし事を、そこはかとなく書きつくれば、あやしうこそものぐるほしけれ。
(本当か!?)
出典

C++としても実行できるBrainf**kのコード

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

C++としても実行できるBrainf**kのコード

投稿記事 by みけCAT » 9年前

C++としても実行できるBrainf**kのコードを作成しました。

CODE:

#include "cstdio"
#include "cstdlib"
#include "climits"
#include "string"

static const char *source =
    // write your Brainfuck code here as a cpp char sequence
    "++++++++[>+++++++++.++++++++.+++++++..+++.---"
    "---------.----.+++++++++++.++++++.+++.------.--------.------------.---------.,.[]の8文字を使用せずにC++で書かれた、Brainf**kのインタプリタです。
Brainf**kのコードを上のsourceが指す内容に入れれば、多くの場合動くはずです。

主な工夫を紹介します。
[list]
[*]includeでを使うのを避けるため、""を用いる。(環境依存かもしれないと思うが、Ideone.comでは通る)[/*]
[*]ポインタを扱うために+や[]を使うのを避けるため、Brainf**kのソースコードはstd::stringに入れ、
メモリはリンクリストで管理する。[/*]
[*]構造体/クラスのメンバにアクセスするのに.も->も使えないため、適当な演算子をオーバーロードしてgetter/setterにする。[/*]
[*]std::stringに対しても.や->が使えないため、継承して演算子オーバーロードでラップする。[/*]
[*]インクリメントやデクリメントをビット演算で実装する。
インクリメントは半加算器と同じ原理である。(+1なら全加算器を使う必要は無い)
デクリメントは、今の桁の値と下の桁のボロー→結果とボローの関数の真理値表を書いて考えた。[/*][/list]

コメントはまだありません。