BrainfuckのBrainfuckインタープリター

HabréでBrainfuckに関連する多くの投稿(その解釈を含む)を見つけた後、私は自分のBrainfuckインタープリターを書きたいと思っていました。 しかし、言語自体が私たちにもたらす必要な感覚を満たすために、それをBrainfuckに書く必要がありました。 そして、私は部分的に成功しました。 私は今、私が持っていないものを予約します:このインタープリター現在、 ループと入力データ入力をサポートしていません(入力データの場合、Brainfuckプログラムが入力されているので、それを読む方法はありません) -簡単に言えば、コマンド " [ "、 " ] "および " "。

制限事項


制限のうち(インタープリターがサポートしていないものに加えて)、次の2つだけがあります。


スピード


すでに提案されていると思いますが、 Brainfuckで通訳を書く価値はないことを明確にします。

難読化されたインタープリターのソースコード


あなたがまだ私がしたことを体験したいという願望を持っているなら、ソースコード自体:
,[>,]>>>>++<<<<<[<]>[[[>]>+>+<<<[<]>-]+[>]>>-[<<<[<]>+[>]>>-]>++++++++++[<++++>-]<+++<[>-<-]+>[<->[-]]<[->>>[<+<<+>>>-]<[>+<-]<<[>>>>>>>>>[>>->>]<<<<[<<<<]<<<<<-]>>>>>>>>>>>[>>>>]<+<[-]<<<<[<<<<]<<[<+<<+>>>-]<[>+<-]<<[>>>>>>>>>>>[>>>>]<<+<<<<[<<<<]<<<<<-]>>>>>>>>>[>>[-]>[-]<<<[>>+>+<<<-]>>>[<<<+>>>-]>]<<<<[<<<<]<<<<<]<<[<]>[[>]>+>+<<<[<]>-]+[>]>>-[<<<[<]>+[>]>>-]>+++++++++[<+++++>-]<<[>-<-]+>[<->[-]]<[->>>[<+<<+>>>-]<[>+<-]<<[>>>>>>>>>[>>->>]<<<<[<<<<]<<<<<-]>>>>>>>>>>>[>>>>]<-<[-]<<<<[<<<<]<<[<+<<+>>>-]<[>+<-]<<[>>>>>>>>>>>[>>>>]<<+<<<<[<<<<]<<<<<-]>>>>>>>>>[>>[-]>[-]<<<[>>+>+<<<-]>>>[<<<+>>>-]>]<<<<[<<<<]<<<<<]<<[<]>[[>]>+>+<<<[<]>-]+[>]>>-[<<<[<]>+[>]>>-]>+++++++++[<+++++>-]<+<[>-<-]+>[<->[-]]<[->>>[<+<<+>>>-]<[>+<-]<<[>>>>>>>>>[>>->>]<<<<[<<<<]<<<<<-]>>>>>>>>>>>[>>>>]<.<<<<<[<<<<]>>>>[>>[-]>[-]<<<[>>+>+<<<-]>>>[<<<+>>>-]>]<<<<[<<<<]<<<<<]<<[<]>[[>]>+>+<<<[<]>-]+[>]>>-[<<<[<]>+[>]>>-]>++++++++++[<++++++>-]<<[>-<-]+>[<->[-]]<[->>>-<<<]<<[<]>[[>]>+>+<<<[<]>-]+[>]>>-[<<<[<]>+[>]>>-]>++++++++++[<++++++>-]<++<[>-<-]+>[<->[-]]<[->>>+<<<]<<[<]>[-]>]

繰り返しますが、このインタープリターはサイクルまたはループをサポートしないため、これらの機能の正しい動作についてこのインタープリターをテストする必要はありません。

brainfuck.tkでBrainfuckコードを実行し、入力データの例として次のコードを使用できます。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.+.+.>++++++++++.<.-.-.
次の2行が出力されます。
ABC
CBA


ソースコード


ソースコードの前に、いくつかのポイントを明確にします。

使用される文字のASCIIコード:

ソースコード:
 ,[>,]  brainfuck  >>>>++<<<<       (N  4) <[<]>    :   N   0 [  [[>]>+>+<<<[<]>-]+[>]>>-[<<<[<]>+[>]>>-]      (N  1) >++++++++++[<++++>-]<+++   43  (N  2)  <[>-<-]       43 +>[<->[-]]<[-     "";  : (N  1) >>>[<+<<+>>>-]<[>+<-]<<   (N  4)    (N  1) [>>>>>>>>>[>>->>]<<<<[<<<<]<<<<<-]         >>>>>>>>>>>[>>>>]<+<[-]    <<<<[<<<<]<<[<+<<+>>>-]<[>+<-]<<   (N  4)   (N  1) [>>>>>>>>>>>[>>>>]<<+<<<<[<<<<]<<<<<-]    >>>>>>>>>[>>[-]>[-]<<<[>>+>+<<<-]>>>[<<<+>>>-]>]    <<<<[<<<<]<<<<<    (N  1) ] <<[<]>    :   (N  1)   0  [[>]>+>+<<<[<]>-]+[>]>>-[<<<[<]>+[>]>>-]      (N  1) >+++++++++[<+++++>-]<   45  (N  2)  <[>-<-]       45 +>[<->[-]]<[-     "";  : (N  1) >>>[<+<<+>>>-]<[>+<-]<<   (N  4)    (N  1) [>>>>>>>>>[>>->>]<<<<[<<<<]<<<<<-]         >>>>>>>>>>>[>>>>]<-<[-]    <<<<[<<<<]<<[<+<<+>>>-]<[>+<-]<<   (N  4)   (N  1) [>>>>>>>>>>>[>>>>]<<+<<<<[<<<<]<<<<<-]    >>>>>>>>>[>>[-]>[-]<<<[>>+>+<<<-]>>>[<<<+>>>-]>]    <<<<[<<<<]<<<<<    (N  1) ] <<[<]>    :   (N  1)   0  [[>]>+>+<<<[<]>-]+[>]>>-[<<<[<]>+[>]>>-]      (N  1) >+++++++++[<+++++>-]<+   46  (N  2)  <[>-<-]       46 +>[<->[-]]<[-     "";  : (N  1) >>>[<+<<+>>>-]<[>+<-]<<   (N  4)    (N  1) [>>>>>>>>>[>>->>]<<<<[<<<<]<<<<<-]         >>>>>>>>>>>[>>>>]<.<    <<<<[<<<<]>>>>[>>[-]>[-]<<<[>>+>+<<<-]>>>[<<<+>>>-]>]    <<<<[<<<<]<<<<<    (N  1) ] <<[<]>    :   (N  1)   0  [[>]>+>+<<<[<]>-]+[>]>>-[<<<[<]>+[>]>>-]      (N  1) >++++++++++[<++++++>-]<   60  (N  2)  <[>-<-]       60 +>[<->[-]]<[-     "";  : (N  1) >>>-<<<     1 ] <<[<]>    :   (N  1)   0  [[>]>+>+<<<[<]>-]+[>]>>-[<<<[<]>+[>]>>-]      (N  1) >++++++++++[<++++++>-]<++   62  (N  2)  <[>-<-]       62 +>[<->[-]]<[-     "";  : (N  1) >>>+<<<     1 ] <<[<]>[-]>          (  ) ] 

結論の代わりに


実行中のサイクルを見るのも面白いでしょうが、現時点では、それらの実装方法の完全な図がわかりません。そのため、インタプリタの完全に機能する実装ができたらすぐに、この記事を更新します。

PS
BrainfuckでBrainfuck インタープリターへのリンクを提供してくれたiSage habloveに感謝します

Source: https://habr.com/ru/post/J113446/


All Articles