digitalmars.D - Compile-time madness: Compile-time compiler!
- Gregor Richards (63/64) Feb 20 2007 This is a compile-time compiler for Brainfuck, the infinitely perfect
- janderson (4/93) Feb 20 2007 Awesome, I'm going to code all my brainfunk code in D-compiler-brainfuck...
- kris (2/73) Feb 20 2007 hehe ... nice one
- John S. Skogtvedt (7/7) Feb 21 2007 If anyone's interested, here's how a compile-time BF compiler looked
- Pragma (4/93) Feb 21 2007 Awesome. Nice work.
This is a compile-time compiler for Brainfuck, the infinitely perfect esoteric programming language ( http://www.esolangs.org/wiki/Brainfuck ) ------------------------------------------------------------ ctbf.d: ------------------------------------------------------------ module ctbf; import std.cstream; import std.stdio; static char[] ctbf(char[] bf) { char[] code = ` byte[] mem; uint memptr = 0; mem.length = 1; void expand() { if (mem.length <= memptr) { mem.length = memptr + 1; } } `; foreach (c; bf) { switch (c) { case '>': code ~= "memptr++; expand();\n"; break; case '<': code ~= "memptr--;\n"; break; case '+': code ~= "mem[memptr]++;\n"; break; case '-': code ~= "mem[memptr]--;\n"; break; case '[': code ~= "while (mem[memptr]) {\n"; break; case ']': code ~= "}\n"; break; case '.': code ~= "dout.write(cast(char) mem[memptr]);\n"; break; case ',': code ~= "din.read(mem[memptr]);\n"; break; default: } } return code; } int main() { mixin(ctbf(import("helloworld.bf"))); return 0; } ------------------------------------------------------------ ------------------------------------------------------------ helloworld.bf: ------------------------------------------------------------+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.>>>++++++++[<++++>-]<.>>>++++++++++[<+++++++++>-]<---.<<<<.+++.------.--------.>>+. ------------------------------------------------------------ - Gregor Richards
Feb 20 2007
Awesome, I'm going to code all my brainfunk code in D-compiler-brainfuck from now on :) -Joel Gregor Richards wrote:This is a compile-time compiler for Brainfuck, the infinitely perfect esoteric programming language ( http://www.esolangs.org/wiki/Brainfuck ) ------------------------------------------------------------ ctbf.d: ------------------------------------------------------------ module ctbf; import std.cstream; import std.stdio; static char[] ctbf(char[] bf) { char[] code = ` byte[] mem; uint memptr = 0; mem.length = 1; void expand() { if (mem.length <= memptr) { mem.length = memptr + 1; } } `; foreach (c; bf) { switch (c) { case '>': code ~= "memptr++; expand();\n"; break; case '<': code ~= "memptr--;\n"; break; case '+': code ~= "mem[memptr]++;\n"; break; case '-': code ~= "mem[memptr]--;\n"; break; case '[': code ~= "while (mem[memptr]) {\n"; break; case ']': code ~= "}\n"; break; case '.': code ~= "dout.write(cast(char) mem[memptr]);\n"; break; case ',': code ~= "din.read(mem[memptr]);\n"; break; default: } } return code; } int main() { mixin(ctbf(import("helloworld.bf"))); return 0; } ------------------------------------------------------------ ------------------------------------------------------------ helloworld.bf: ------------------------------------------------------------ >+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++. >>++++++++[<++++>-] <.>>>++++++++++[<+++++++++>-]<---.<<<<.+++.------.--------.>>+. ------------------------------------------------------------ - Gregor Richards
Feb 20 2007
Gregor Richards wrote:This is a compile-time compiler for Brainfuck, the infinitely perfect esoteric programming language ( http://www.esolangs.org/wiki/Brainfuck ) ------------------------------------------------------------ ctbf.d: ------------------------------------------------------------ module ctbf; import std.cstream; import std.stdio; static char[] ctbf(char[] bf) { char[] code = ` byte[] mem; uint memptr = 0; mem.length = 1; void expand() { if (mem.length <= memptr) { mem.length = memptr + 1; } } `; foreach (c; bf) { switch (c) { case '>': code ~= "memptr++; expand();\n"; break; case '<': code ~= "memptr--;\n"; break; case '+': code ~= "mem[memptr]++;\n"; break; case '-': code ~= "mem[memptr]--;\n"; break; case '[': code ~= "while (mem[memptr]) {\n"; break; case ']': code ~= "}\n"; break; case '.': code ~= "dout.write(cast(char) mem[memptr]);\n"; break; case ',': code ~= "din.read(mem[memptr]);\n"; break; default: } } return code; } int main() { mixin(ctbf(import("helloworld.bf"))); return 0; } ------------------------------------------------------------hehe ... nice one
Feb 20 2007
If anyone's interested, here's how a compile-time BF compiler looked like in November. Basically each BF command compiled into a function, and it only worked for smaller BF programs. http://www.digitalmars.com/d/archives/digitalmars/D/learn/A_brainf..._implementation_using_D_templates_5158.html http://home.chello.no/~jskogtv/bf.d At least when it comes to being a BF compiler, D has improved a lot :)
Feb 21 2007
Gregor Richards wrote:This is a compile-time compiler for Brainfuck, the infinitely perfect esoteric programming language ( http://www.esolangs.org/wiki/Brainfuck ) ------------------------------------------------------------ ctbf.d: ------------------------------------------------------------ module ctbf; import std.cstream; import std.stdio; static char[] ctbf(char[] bf) { char[] code = ` byte[] mem; uint memptr = 0; mem.length = 1; void expand() { if (mem.length <= memptr) { mem.length = memptr + 1; } } `; foreach (c; bf) { switch (c) { case '>': code ~= "memptr++; expand();\n"; break; case '<': code ~= "memptr--;\n"; break; case '+': code ~= "mem[memptr]++;\n"; break; case '-': code ~= "mem[memptr]--;\n"; break; case '[': code ~= "while (mem[memptr]) {\n"; break; case ']': code ~= "}\n"; break; case '.': code ~= "dout.write(cast(char) mem[memptr]);\n"; break; case ',': code ~= "din.read(mem[memptr]);\n"; break; default: } } return code; } int main() { mixin(ctbf(import("helloworld.bf"))); return 0; } ------------------------------------------------------------ ------------------------------------------------------------ helloworld.bf: ------------------------------------------------------------ >+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++. >>++++++++[<++++>-] <.>>>++++++++++[<+++++++++>-]<---.<<<<.+++.------.--------.>>+. ------------------------------------------------------------ - Gregor RichardsAwesome. Nice work. -- - EricAnderton at yahoo
Feb 21 2007