この記事で紹介したBrainfuck系言語「INSTEP (INterpreter for Supplementary Tokens and Encodable Printing)」のインタプリタです。普通のBrainfuckインタプリタ(入力ストリームなし)としても使えます。
INSTEPの名前自体にInterpreterが入ってるのにINSTEPのインタプリタって言うのはおかしいと思っても気にしない。
説明・詳しい挙動などは下にあります。
命令 | 動作 |
---|---|
> |
データポインタを右に移動 |
< |
データポインタを左に移動 |
+ |
ポインタの指す値をインクリメント |
- |
ポインタの指す値をデクリメント |
^ |
ポインタの指す値を左に1ビットシフト |
v |
ポインタの指す値を右に1ビットシフト |
[ |
ポインタの指す値が0なら対応する] の直後へジャンプ |
] |
対応する[ へジャンプ |
. |
ポインタの指す値を出力 |
上記以外の文字は基本的にすべて無視されます。
(例:255 + 1 = 0, 0 - 1 = 255
)
(例:10000001 << 1 = 00000010, 00001111 >> 1 = 00000111
)
PointerOverFlowError
ポインタがデータ領域の右端からはみ出たとき。
(例: PointerOverFlowError: Pointer Overflow at 7 (~ +++[- > +]>>> ~)
)
PointerUnderFlowError
ポインタがデータ領域の左端からはみ出たとき。
(例: PointerUnderFlowError: Pointer Underflow at 14 (~ --<[< < ]>>>+ ~)
)
InvalidTokenError
括弧の対応が取れていないとき。
(例: InvalidTokenError: Invalid Token '[' at 364 (~ -]>>v [ [>]+^ ~)
)
v
の代わりに$
を使う
コード中に英語でコメントを入れる場合、無意識にv
を使ってしまい誤動作を引き起こすことがあるから
!
でデバッグ
その時点でのポインタの位置とポインタの指す値を出力する
+^^^^[>>+++++>++++++>+++++++>++<<<<<-]>>--------.>+++++.>----..+++.>.<<<<+^^^^[>+<-]>-.>>.+++.------.<-.
+^+^+^^^^+^+.>+^^^^^^^+.+.
+^^^^^+^.>>+^+^+^^^+^.<+^^^^+[>-<-]>.++++++++.+++++.--------.<+^^^^-[>+<-]>.<+^^^+^[>-<-]>.++++++++.>+^+^+^^^^+^+.<<+^+^^^--[>+<-]>.>>>+^^+^^+^+^+^+.<<.<+.>>>.<<.<.>>+^^^^--[>+<-]>.
>>+^^^^^[>++>++++>++++>+++>++<<<<<-]++++>++>----------->------>+++++++++>++++++>++>>>+^^^^^>+^+^^^+^^>>+^^^^-<<[->>>>>>>+>+[<[>-<-<<[->>+>+<<<]>>[-<<+>>]+>[<->[-]]<[-<<+^+^^^^>+^^^+>]+<[-<+>>-]>[-<+^^^+<--------->>>>>>+<<<]>>>>+<<<<<]>[<<<[>>>->>>>+<<<<]>>>[->>>]<<<]>>>>]<<<<<<<<<<<[<<<<]<<<<+<[->-]>[-<++<.<.<..>>>>>>>>>[-]<<<<]<<<[<<<]+>[-<-]<[->++++>.>.>..>>>>>>>>>[-]<<<<<<<<<<<<<<]>>>[>>>>]+<[>->>[>>>>]<<<<[.<<<<]>>]>[-<+>>]<<<<<.>]
>+^^+^+^+^^+>+^+^+^+^^>+^^+^+^+^>+^^+^+^^+^+>+^+^+^+^^>+^^+^+^+^^+>+^^+^^+^+>+^+^+^+^^>+^^+^+^+^>+^^+^+^^+>+^^+^+^^+^+>+^^+^^+^+>+^+^+^+^^>+^^+^+^+^^+>+^+^+^+^+^>+^^+^+^^+^+>+^+^+^+^+^>+^+^+^+^+^>+^+^+^+^+^>+^+^+^+^+^>+^+^+^+^+^>+^+^+^+^+^>+^^+^+^+^^+>+^+^+^+^^>+^+^+^+^^>+^+^+^+^^>+^+^+^+^^>+^+^+^+^^>+^^+^+^+^^+>+^+^+^+^^>+^^+^+^^+^+>+^^+^+^+^+^>+^^+^^+^+>+^^+^+^+^+^>+^^+^^+^+>+^^+^+^+^+^>+^^+^^+^+>+^^+^+^+^+^>+^^+^^+^+>+^^+^+^+^+^>+^^+^^+^+>+^^+^+^+^^+>+^+^+^+^+^>+^^+^+^^+^+>+^+^+^+^+^>+^+^+^+^+^>+^+^+^+^+^>+^+^+^+^+^>+^+^+^+^+^>+^^+^+^+^^+>+^^+^+^^+>+^+^+^+^^>+^^+^+^+^^+>+^^+^+^^+>+^+^+^+^^>+^+^+^+^^>+^+^+^+^^>+^^+^^+^+>+^+^+^+^+^>+^^+^^+^+>+^+^+^+^+^>+^^+^^+^+>+^+^+^+^+^>+^^+^+^^+^+>+^+^+^+^^>+^+^+^+^^>+^+^+^+^^>+^^+^+^+^^+>+^^+^+^+^^+>+^^+^+^^+>+^+^+^+^+^>+^+^+^+^+^>+^+^+^+^+^>+^^+^^+^+>+^+^+^+^^>+^+^+^+^^>+^+^+^+^^>+^^+^+^^+^+>+^+^+^+^+^>+^^+^+^+^^+>+^+^+^+^^>+^^+^+^^+^+>+^^+^+^+^+^>+^^+^^+^+>+^^+^+^+^+^>+^^+^^+^+>+^^+^+^+^+^>+^^+^^+^+>+^^+^+^+^+^>+^^+^^+^+>+^^+^+^+^+^>+^^+^+^+^+^>+^^+^^+^+>+^^+^+^+^^+>+^+^+^+^+^>+^^+^+^^+^+>+^^+^+^^+^+>+^+^+^^+^+^>+^+^+^+^+^>+^+^+^+^+^>+^^+^+^+^^+>+^^+^+^^+>+^+^+^+^^>+^^+^+^+^^+>+^+^+^+^^>+^^+^+^^+^+>+^^+^^+^+>+^^+^+^+^+^>+^^+^^+^+>+^^+^+^+^+^>+^^+^+^+^+^>+^^+^^+^+>+^^+^+^+^+^>+^^+^+^+^+^>+^^+^^+^+>+^^+^+^+^^+>+^+^+^+^+^>+^^+^+^^+^+>+^+^+^+^+^>+^+^+^+^+^>+^^+^+^^+^+>+^+^+^+^^>+^^+^+^+^^+>+^+^+^+^+^>+^^+^+^^+>+^+^+^+^^>+^^+^+^^+>+^^+^+^^+^+>+^^+^+^+^+^>+^+^+^^+^+^>+^+^+^+^+^>+^+^+^+^+^>+^+^+^+^+^>+^^+^+^^+^+>+^^+^+^+^+^>+^^+^+^+^+^>+^^+^+^+^+^>+^^+^^+^+>+^^+^+^+^^+>+^^+^+^^+>+^+^+^+^^>+^+^+^+^^>+^+^+^+^^>+^+^+^+^^>+^+^+^+^^>+^^+^^+^+>+^+^+^+^+^>+^^+^^+^+>+^+^+^+^+^>+^^+^^+^+>+^+^+^+^+^>+^^+^^+^+>+^+^+^+^+^>+^+^+^+^+^>+^^+^+^^+^+>+^^+^+^^+^+>+^+^+^+^^>+^+^+^+^^>+^+^+^+^^>+^+^+^+^^>+^+^+^+^^>+^+^+^+^^>+^^+^+^^+>+^+^+^+^+^>+^+^+^+^+^>+^+^+^+^+^>+^+^+^+^+^>+^+^+^+^+^>+^+^+^+^+^>>>>>>-<<<<<<[[>>+>+>+>+<<<<<-]+^^^[>>>v^[-<->]<[>>[>]+^^+^^+^+[<]<-]>>v[[>]+^^+^+^+^+^[<]>[<<<+>>>-]]<<<[>+>+>+<<<-]<-]>>>>>[>]+^+^+^+^+^[<]<<<<<]>>>>>>[>]<+[-.<+]<[.<]