Interpret or compile Brainfuck Language

XGG Blog

https://github.com/CyberZHG/BrainFunk

The repository Brainfunk has two branches. The master branch is written in raw C, which could interpret brainfuck code or compile the brainfuck code to C. The gh-pages branch contains a interpret written in JavaScript.

masterInterpreter

The implemented interpreter has infinite array size for brainfuck runtime.

The code below

interpret(“++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.——.——–.>+.>.”);

will print Hello World! in the terminal.

Compiler

The compiled C code has finite array size, however, the continuous + and -, > and < could be combined into a single operation.

compile(“>>>+[[-]>>[-]++>+>+++++++[<++++>>++<-]++>>+>+>+++++[>++>++++++<<-]+>>>,<++[[>[->>]<[>>]<<-]<[<]<+>>[>]>[<+>-[[<+>-]>]<[[[-]<]++<-[<+++++++++>[<->-]>>]>>]]<<]<]<[[<]>[[>]>>[>>]+[<<]<[<]<+>>-]>[>]+[->>]<<<<[[<<]<[<]+<<[+>+<<-[>–>+<<-[>+<[>>+<<-]]]>[<+>-]<]++>>–>[>]>>[>>]]<<[>>+<[[<]<]>[[<<]<[<]+[-<+>>-[<<+>++>-[<->[<<+>>-]]]<[>+<-]>]>[>]>]>[>>]>>]<<[>>+>>+>>]<<[->>>>>>>>]<<[>.>>>>>>>]<<[>->>>>>]<<[>,>>>]<<[>+>]<<[+<<]<]”, “interpreter.c”);

will generate the following code (which is another Brainfuck interpreter):

[32000];int main() {char* ptr = array;ptr += 3;++*ptr;while (*ptr) {while (*ptr) {–*ptr;}ptr += 2;while (*ptr) {–*ptr;}*ptr += 2;++ptr;++*ptr;++ptr;*ptr += 7;while (*ptr) {–ptr;*ptr += 4;ptr += 2;*ptr += 2;–ptr;–*ptr;}*ptr += 2;ptr += 2;++*ptr;++ptr;++*ptr;++ptr;*ptr += 5;while (*ptr) {++ptr;*ptr += 2;++ptr;*ptr += 6;ptr += -2;–*ptr;}++*ptr;ptr += 3;*ptr = getchar();–ptr;*ptr += 2;while (*ptr) {while (*ptr) {++ptr;while (*ptr) {–*ptr;ptr += 2;}–ptr;while (*ptr) {ptr += 2;}ptr += -2;–*ptr;}–ptr;while (*ptr) {–ptr;}–ptr;++*ptr;ptr += 2;while (*ptr) {++ptr;}++ptr;while (*ptr) {–ptr;++*ptr;++ptr;–*ptr;while (*ptr) {while (*ptr) {–ptr;++*ptr;++ptr;–*ptr;}++ptr;}–ptr;while (*ptr) {while (*ptr) {while (*ptr) {–*ptr;}–ptr;}*ptr += 2;–ptr;–*ptr;while (*ptr) {–ptr;*ptr += 9;++ptr;while (*ptr) {–ptr;–*ptr;++ptr;–*ptr;}ptr += 2;}ptr += 2;}}ptr += -2;}–ptr;}–ptr;while (*ptr) {while (*ptr) {–ptr;}++ptr;while (*ptr) {while (*ptr) {++ptr;}ptr += 2;while (*ptr) {ptr += 2;}++*ptr;while (*ptr) {ptr += -2;}–ptr;while (*ptr) {–ptr;}–ptr;++*ptr;ptr += 2;–*ptr;}++ptr;while (*ptr) {++ptr;}++*ptr;while (*ptr) {–*ptr;ptr += 2;}ptr += -4;while (*ptr) {while (*ptr) {ptr += -2;}–ptr;while (*ptr) {–ptr;}++*ptr;ptr += -2;while (*ptr) {++*ptr;++ptr;++*ptr;ptr += -2;–*ptr;while (*ptr) {++ptr;*ptr += -2;++ptr;++*ptr;ptr += -2;–*ptr;while (*ptr) {++ptr;++*ptr;–ptr;while (*ptr) {ptr += 2;++*ptr;ptr += -2;–*ptr;}}}++ptr;while (*ptr) {–ptr;++*ptr;++ptr;–*ptr;}–ptr;}*ptr += 2;ptr += 2;*ptr += -2;++ptr;while (*ptr) {++ptr;}ptr += 2;while (*ptr) {ptr += 2;}}ptr += -2;while (*ptr) {ptr += 2;++*ptr;–ptr;while (*ptr) {while (*ptr) {–ptr;}–ptr;}++ptr;while (*ptr) {while (*ptr) {ptr += -2;}–ptr;while (*ptr) {–ptr;}++*ptr;while (*ptr) {–*ptr;–ptr;++*ptr;ptr += 2;–*ptr;while (*ptr) {ptr += -2;++*ptr;++ptr;*ptr += 2;++ptr;–*ptr;while (*ptr) {–ptr;–*ptr;++ptr;while (*ptr) {ptr += -2;++*ptr;ptr += 2;–*ptr;}}}–ptr;while (*ptr) {++ptr;++*ptr;–ptr;–*ptr;}++ptr;}++ptr;while (*ptr) {++ptr;}++ptr;}++ptr;while (*ptr) {ptr += 2;}ptr += 2;}ptr += -2;while (*ptr) {ptr += 2;++*ptr;ptr += 2;++*ptr;ptr += 2;}ptr += -2;while (*ptr) {–*ptr;ptr += 8;}ptr += -2;while (*ptr) {++ptr;putchar(*ptr);ptr += 7;}ptr += -2;while (*ptr) {++ptr;–*ptr;ptr += 5;}ptr += -2;while (*ptr) {++ptr;*ptr = getchar();ptr += 3;}ptr += -2;while (*ptr) {++ptr;++*ptr;++ptr;}ptr += -2;while (*ptr) {++*ptr;ptr += -2;}–ptr;}return 0;}gh-pages

,在时间里面我们什么也不能留下,包括痛苦,快乐和生命。

Interpret or compile Brainfuck Language

相关文章:

你感兴趣的文章:

标签云: