Python Brainf*ck Compiler (Alpha)

I was bored so i made a python compiler for brainf*ck programming language.

Links

Source Code (Github)
What is Brainf*ck?

Example Brainf*ck Program

<span>[ This program prints "Hello World!" and a newline to the screen, its length is 106 active command characters. [It is not the shortest.] This loop is an "initial comment loop", a simple way of adding a comment to a BF program such that you don't have to worry about any command characters. Any ".", ",", "+", "-", "<" and ">" characters are simply ignored, the "[" and "]" characters just have to be balanced. This loop and the commands it contains are ignored because the current cell defaults to a value of 0; the 0 value causes this loop to be skipped. ]</span>
<span>++++++++</span><span> Set Cell #0 to 8 </span><span>[</span><span> </span><span>></span><span>++++</span><span> Add 4 to Cell #1; this will always set Cell #1 to 4 </span><span>[</span><span> as the cell will be cleared by the loop </span><span>></span><span>++</span><span> Add 2 to Cell #2 </span><span>></span><span>+++</span><span> Add 3 to Cell #3 </span><span>></span><span>+++</span><span> Add 3 to Cell #4 </span><span>></span><span>+</span><span> Add 1 to Cell #5 </span><span><<<<</span><span>-</span><span> Decrement the loop counter in Cell #1 </span><span>]</span><span> Loop till Cell #1 is zero; number of iterations is 4 </span><span>></span><span>+</span><span> Add 1 to Cell #2 </span><span>></span><span>+</span><span> Add 1 to Cell #3 </span><span>></span><span>-</span><span> Subtract 1 from Cell #4 </span><span>>></span><span>+</span><span> Add 1 to Cell #6 </span><span>[</span><span><</span><span>]</span><span> Move back to the first zero cell you find; this will be Cell #1 which was cleared by the previous loop </span><span><</span><span>-</span><span> Decrement the loop Counter in Cell #0 </span><span>]</span><span> Loop till Cell #0 is zero; number of iterations is 8 The result of this is: Cell No : 0 1 2 3 4 5 6 Contents: 0 0 72 104 88 32 8 Pointer : ^ </span><span>>></span><span>.</span><span> Cell #2 has value 72 which is 'H' </span><span>></span><span>---.</span><span> Subtract 3 from Cell #3 to get 101 which is 'e' </span><span>+++++++..+++.</span><span> Likewise for 'llo' from Cell #3 </span><span>>></span><span>.</span><span> Cell #5 is 32 for the space </span><span><</span><span>-.</span><span> Subtract 1 from Cell #4 for 87 to give a 'W' </span><span><</span><span>.</span><span> Cell #3 was set to 'o' from the end of 'Hello' </span><span>+++.------.--------.</span><span> Cell #3 for 'rl' and 'd' </span><span>>></span><span>+.</span><span> Add 1 to Cell #5 gives us an exclamation point </span><span>></span><span>++.</span><span> And finally a newline from Cell #6 </span>
<span>[ This program prints "Hello World!" and a newline to the screen, its length is 106 active command characters. [It is not the shortest.] This loop is an "initial comment loop", a simple way of adding a comment to a BF program such that you don't have to worry about any command characters. Any ".", ",", "+", "-", "<" and ">" characters are simply ignored, the "[" and "]" characters just have to be balanced. This loop and the commands it contains are ignored because the current cell defaults to a value of 0; the 0 value causes this loop to be skipped. ]</span>
<span>++++++++</span><span> Set Cell #0 to 8 </span><span>[</span><span> </span><span>></span><span>++++</span><span> Add 4 to Cell #1; this will always set Cell #1 to 4 </span><span>[</span><span> as the cell will be cleared by the loop </span><span>></span><span>++</span><span> Add 2 to Cell #2 </span><span>></span><span>+++</span><span> Add 3 to Cell #3 </span><span>></span><span>+++</span><span> Add 3 to Cell #4 </span><span>></span><span>+</span><span> Add 1 to Cell #5 </span><span><<<<</span><span>-</span><span> Decrement the loop counter in Cell #1 </span><span>]</span><span> Loop till Cell #1 is zero; number of iterations is 4 </span><span>></span><span>+</span><span> Add 1 to Cell #2 </span><span>></span><span>+</span><span> Add 1 to Cell #3 </span><span>></span><span>-</span><span> Subtract 1 from Cell #4 </span><span>>></span><span>+</span><span> Add 1 to Cell #6 </span><span>[</span><span><</span><span>]</span><span> Move back to the first zero cell you find; this will be Cell #1 which was cleared by the previous loop </span><span><</span><span>-</span><span> Decrement the loop Counter in Cell #0 </span><span>]</span><span> Loop till Cell #0 is zero; number of iterations is 8 The result of this is: Cell No : 0 1 2 3 4 5 6 Contents: 0 0 72 104 88 32 8 Pointer : ^ </span><span>>></span><span>.</span><span> Cell #2 has value 72 which is 'H' </span><span>></span><span>---.</span><span> Subtract 3 from Cell #3 to get 101 which is 'e' </span><span>+++++++..+++.</span><span> Likewise for 'llo' from Cell #3 </span><span>>></span><span>.</span><span> Cell #5 is 32 for the space </span><span><</span><span>-.</span><span> Subtract 1 from Cell #4 for 87 to give a 'W' </span><span><</span><span>.</span><span> Cell #3 was set to 'o' from the end of 'Hello' </span><span>+++.------.--------.</span><span> Cell #3 for 'rl' and 'd' </span><span>>></span><span>+.</span><span> Add 1 to Cell #5 gives us an exclamation point </span><span>></span><span>++.</span><span> And finally a newline from Cell #6 </span>
[ This program prints "Hello World!" and a newline to the screen, its length is 106 active command characters. [It is not the shortest.] This loop is an "initial comment loop", a simple way of adding a comment to a BF program such that you don't have to worry about any command characters. Any ".", ",", "+", "-", "<" and ">" characters are simply ignored, the "[" and "]" characters just have to be balanced. This loop and the commands it contains are ignored because the current cell defaults to a value of 0; the 0 value causes this loop to be skipped. ] ++++++++ Set Cell #0 to 8 [ >++++ Add 4 to Cell #1; this will always set Cell #1 to 4 [ as the cell will be cleared by the loop >++ Add 2 to Cell #2 >+++ Add 3 to Cell #3 >+++ Add 3 to Cell #4 >+ Add 1 to Cell #5 <<<<- Decrement the loop counter in Cell #1 ] Loop till Cell #1 is zero; number of iterations is 4 >+ Add 1 to Cell #2 >+ Add 1 to Cell #3 >- Subtract 1 from Cell #4 >>+ Add 1 to Cell #6 [<] Move back to the first zero cell you find; this will be Cell #1 which was cleared by the previous loop <- Decrement the loop Counter in Cell #0 ] Loop till Cell #0 is zero; number of iterations is 8 The result of this is: Cell No : 0 1 2 3 4 5 6 Contents: 0 0 72 104 88 32 8 Pointer : ^ >>. Cell #2 has value 72 which is 'H' >---. Subtract 3 from Cell #3 to get 101 which is 'e' +++++++..+++. Likewise for 'llo' from Cell #3 >>. Cell #5 is 32 for the space <-. Subtract 1 from Cell #4 for 87 to give a 'W' <. Cell #3 was set to 'o' from the end of 'Hello' +++.------.--------. Cell #3 for 'rl' and 'd' >>+. Add 1 to Cell #5 gives us an exclamation point >++. And finally a newline from Cell #6

Enter fullscreen mode Exit fullscreen mode

Config

Check config.json first, quick information about config.json;

<span>{</span>
<span>"</span><span>MEM</span><span>"</span><span>:</span> <span>20</span><span>,</span> <span>// MEM is the total cells for our brainfuck program.</span>
<span>"</span><span>DUMP_FILE</span><span>"</span><span>:</span> <span>"</span><span>./result/dump.py</span><span>"</span><span>,</span> <span>// The dump file that will write when program finished and got some informations about the code. </span>
<span>"</span><span>COMPILE_FILE</span><span>"</span><span>:</span> <span>"</span><span>./result/compiled.py</span><span>"</span><span>,</span> <span>// The file that will write when brainfuck code turned into python code.</span>
<span>"</span><span>LOG_FILE</span><span>"</span><span>:</span> <span>"</span><span>./result/logs.txt</span><span>"</span><span>,</span> <span>// Log file for our program actions.</span>
<span>"</span><span>DEBUG</span><span>"</span><span>:</span> <span>true</span> <span>// Allow debug mode for compiler, will log everything to console.</span>
<span>}</span>
<span>{</span>
    <span>"</span><span>MEM</span><span>"</span><span>:</span> <span>20</span><span>,</span> <span>// MEM is the total cells for our brainfuck program.</span>
    <span>"</span><span>DUMP_FILE</span><span>"</span><span>:</span> <span>"</span><span>./result/dump.py</span><span>"</span><span>,</span> <span>// The dump file that will write when program finished and got some informations about the code. </span>
    <span>"</span><span>COMPILE_FILE</span><span>"</span><span>:</span> <span>"</span><span>./result/compiled.py</span><span>"</span><span>,</span> <span>// The file that will write when brainfuck code turned into python code.</span>
    <span>"</span><span>LOG_FILE</span><span>"</span><span>:</span> <span>"</span><span>./result/logs.txt</span><span>"</span><span>,</span> <span>// Log file for our program actions.</span>
    <span>"</span><span>DEBUG</span><span>"</span><span>:</span> <span>true</span> <span>// Allow debug mode for compiler, will log everything to console.</span>
<span>}</span>
{ "MEM": 20, // MEM is the total cells for our brainfuck program. "DUMP_FILE": "./result/dump.py", // The dump file that will write when program finished and got some informations about the code. "COMPILE_FILE": "./result/compiled.py", // The file that will write when brainfuck code turned into python code. "LOG_FILE": "./result/logs.txt", // Log file for our program actions. "DEBUG": true // Allow debug mode for compiler, will log everything to console. }

Enter fullscreen mode Exit fullscreen mode

Usage

Simple Usage;
python compiler.py ./example/fibonacci.bf

Output: ... 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 ...

And also you can check ./result/dump.py for some informations about program;

<span># DUMP RESULT | 13/05/2021 16:59:13 # ======================================================= # TOTAL CELL GIVEN: 20 # TOTAL CELL USED: 4 # TOTAL BYTE USED: 309 # MEMORY DUMP: [ </span> <span># CELL_0 -> 0 BYTE </span> <span># CELL_1 -> 144 BYTE </span> <span># CELL_2 -> 89 BYTE </span> <span># CELL_3 -> 0 BYTE </span> <span># CELL_4 -> 0 BYTE </span> <span># CELL_5 -> 44 BYTE </span> <span># CELL_6 -> 32 BYTE </span> <span># CELL_7 -> 0 BYTE </span> <span># CELL_8 -> 0 BYTE </span> <span># CELL_9 -> 0 BYTE </span> <span># CELL_10 -> 0 BYTE </span> <span># CELL_11 -> 0 BYTE </span> <span># CELL_12 -> 0 BYTE </span> <span># CELL_13 -> 0 BYTE </span> <span># CELL_14 -> 0 BYTE </span> <span># CELL_15 -> 0 BYTE </span> <span># CELL_16 -> 0 BYTE </span> <span># CELL_17 -> 0 BYTE </span> <span># CELL_18 -> 0 BYTE </span> <span># CELL_19 -> 0 BYTE # ] </span>
<span># MINIFIED VERSION: [ </span> <span># LINE_1 -> +++++++++++>+>>>>++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++ </span> <span># LINE_2 -> ++++++++++++++<<<<<<[>[>>>>>>+>+<<<<<<<-]>>>>>>>[<<<<<<<+>>>>>>>-]<[>++++++++++[ </span> <span># LINE_3 -> -<-[>>+>+<<<-]>>>[<<<+>>>-]+<[>[-]<[-]]>[<<[>>>+<<<-]>>[-]]<<]>>>[>>+>+<<<-]>>>[ </span> <span># LINE_4 -> <<<+>>>-]+<[>[-]<[-]]>[<<+>>[-]]<<<<<<<]>>>>>[++++++++++++++++++++++++++++++++++ </span> <span># LINE_5 -> ++++++++++++++.[-]]++++++++++<[->-<]>+++++++++++++++++++++++++++++++++++++++++++ </span> <span># LINE_6 -> +++++.[-]<<<<<<<<<<<<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<-[>>.>.<<<[-]]<<[>>+>+<<<-]>> </span> <span># LINE_7 -> >[<<<+>>>-]<<[<+>-]>[<+>-]<<<-] # ] # ======================================================= </span>
<span># Code Starts Here ... </span>
<span># DUMP RESULT | 13/05/2021 16:59:13 # ======================================================= # TOTAL CELL GIVEN: 20 # TOTAL CELL USED: 4 # TOTAL BYTE USED: 309 # MEMORY DUMP: [ </span>    <span># CELL_0 -> 0 BYTE </span>    <span># CELL_1 -> 144 BYTE </span>    <span># CELL_2 -> 89 BYTE </span>    <span># CELL_3 -> 0 BYTE </span>    <span># CELL_4 -> 0 BYTE </span>    <span># CELL_5 -> 44 BYTE </span>    <span># CELL_6 -> 32 BYTE </span>    <span># CELL_7 -> 0 BYTE </span>    <span># CELL_8 -> 0 BYTE </span>    <span># CELL_9 -> 0 BYTE </span>    <span># CELL_10 -> 0 BYTE </span>    <span># CELL_11 -> 0 BYTE </span>    <span># CELL_12 -> 0 BYTE </span>    <span># CELL_13 -> 0 BYTE </span>    <span># CELL_14 -> 0 BYTE </span>    <span># CELL_15 -> 0 BYTE </span>    <span># CELL_16 -> 0 BYTE </span>    <span># CELL_17 -> 0 BYTE </span>    <span># CELL_18 -> 0 BYTE </span>    <span># CELL_19 -> 0 BYTE # ] </span>
<span># MINIFIED VERSION: [ </span>    <span># LINE_1 -> +++++++++++>+>>>>++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++ </span>    <span># LINE_2 -> ++++++++++++++<<<<<<[>[>>>>>>+>+<<<<<<<-]>>>>>>>[<<<<<<<+>>>>>>>-]<[>++++++++++[ </span>    <span># LINE_3 -> -<-[>>+>+<<<-]>>>[<<<+>>>-]+<[>[-]<[-]]>[<<[>>>+<<<-]>>[-]]<<]>>>[>>+>+<<<-]>>>[ </span>    <span># LINE_4 -> <<<+>>>-]+<[>[-]<[-]]>[<<+>>[-]]<<<<<<<]>>>>>[++++++++++++++++++++++++++++++++++ </span>    <span># LINE_5 -> ++++++++++++++.[-]]++++++++++<[->-<]>+++++++++++++++++++++++++++++++++++++++++++ </span>    <span># LINE_6 -> +++++.[-]<<<<<<<<<<<<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<-[>>.>.<<<[-]]<<[>>+>+<<<-]>> </span>    <span># LINE_7 -> >[<<<+>>>-]<<[<+>-]>[<+>-]<<<-] # ] # ======================================================= </span>
<span># Code Starts Here ... </span>
# DUMP RESULT | 13/05/2021 16:59:13 # ======================================================= # TOTAL CELL GIVEN: 20 # TOTAL CELL USED: 4 # TOTAL BYTE USED: 309 # MEMORY DUMP: [ # CELL_0 -> 0 BYTE # CELL_1 -> 144 BYTE # CELL_2 -> 89 BYTE # CELL_3 -> 0 BYTE # CELL_4 -> 0 BYTE # CELL_5 -> 44 BYTE # CELL_6 -> 32 BYTE # CELL_7 -> 0 BYTE # CELL_8 -> 0 BYTE # CELL_9 -> 0 BYTE # CELL_10 -> 0 BYTE # CELL_11 -> 0 BYTE # CELL_12 -> 0 BYTE # CELL_13 -> 0 BYTE # CELL_14 -> 0 BYTE # CELL_15 -> 0 BYTE # CELL_16 -> 0 BYTE # CELL_17 -> 0 BYTE # CELL_18 -> 0 BYTE # CELL_19 -> 0 BYTE # ] # MINIFIED VERSION: [ # LINE_1 -> +++++++++++>+>>>>++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++ # LINE_2 -> ++++++++++++++<<<<<<[>[>>>>>>+>+<<<<<<<-]>>>>>>>[<<<<<<<+>>>>>>>-]<[>++++++++++[ # LINE_3 -> -<-[>>+>+<<<-]>>>[<<<+>>>-]+<[>[-]<[-]]>[<<[>>>+<<<-]>>[-]]<<]>>>[>>+>+<<<-]>>>[ # LINE_4 -> <<<+>>>-]+<[>[-]<[-]]>[<<+>>[-]]<<<<<<<]>>>>>[++++++++++++++++++++++++++++++++++ # LINE_5 -> ++++++++++++++.[-]]++++++++++<[->-<]>+++++++++++++++++++++++++++++++++++++++++++ # LINE_6 -> +++++.[-]<<<<<<<<<<<<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<-[>>.>.<<<[-]]<<[>>+>+<<<-]>> # LINE_7 -> >[<<<+>>>-]<<[<+>-]>[<+>-]<<<-] # ] # ======================================================= # Code Starts Here ...

Enter fullscreen mode Exit fullscreen mode

Notes

This program may have some bugs. If you found a bug, please contribute!

原文链接:Python Brainf*ck Compiler (Alpha)

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
We are the tender love in the world.
我们都在被这个世界温柔的爱着
评论 抢沙发

请登录后发表评论

    暂无评论内容