50 lines
2.2 KiB
Factor
50 lines
2.2 KiB
Factor
|
! Copyright (C) 2009 John Benediktsson
|
||
|
! See http://factorcode.org/license.txt for BSD license
|
||
|
|
||
|
USING: help.syntax help.markup brainfuck strings ;
|
||
|
|
||
|
IN: brainfuck
|
||
|
|
||
|
HELP: run-brainfuck
|
||
|
{ $values { "code" string } }
|
||
|
{ $description
|
||
|
"A brainfuck program is a sequence of eight commands that are "
|
||
|
"executed sequentially. An instruction pointer begins at the first "
|
||
|
"command, and each command is executed until the program terminates "
|
||
|
"when the instruction pointer moves beyond the last command.\n"
|
||
|
"\n"
|
||
|
"The eight language commands, each consisting of a single character, "
|
||
|
"are the following:\n"
|
||
|
{ $table
|
||
|
{ "Character" "Meaning" }
|
||
|
{ ">" "increment the data pointer (to point to the next cell to the right)." }
|
||
|
{ "<" "decrement the data pointer (to point to the next cell to the left)." }
|
||
|
{ "+" "increment (increase by one) the byte at the data pointer." }
|
||
|
{ "-" "decrement (decrease by one) the byte at the data pointer." }
|
||
|
{ "." "output the value of the byte at the data pointer." }
|
||
|
{ "," "accept one byte of input, storing its value in the byte at the data pointer." }
|
||
|
{ "[" "if the byte at the data pointer is zero, then instead of moving the instruction pointer forward to the next command, jump it forward to the command after the matching ] command*." }
|
||
|
{ "]" "if the byte at the data pointer is nonzero, then instead of moving the instruction pointer forward to the next command, jump it back to the command after the matching [ command*." }
|
||
|
}
|
||
|
"\n"
|
||
|
"Brainfuck programs can be translated into C using the following "
|
||
|
"substitutions, assuming ptr is of type unsigned char* and has been "
|
||
|
"initialized to point to an array of zeroed bytes:\n"
|
||
|
{ $table
|
||
|
{ "Character" "C equivalent" }
|
||
|
{ ">" "++ptr;" }
|
||
|
{ "<" "--ptr;" }
|
||
|
{ "+" "++*ptr;" }
|
||
|
{ "-" "--*ptr;" }
|
||
|
{ "." "putchar(*ptr);" }
|
||
|
{ "," "*ptr=getchar();" }
|
||
|
{ "[" "while (*ptr) {" }
|
||
|
{ "]" "}" }
|
||
|
}
|
||
|
} ;
|
||
|
|
||
|
HELP: get-brainfuck
|
||
|
{ $values { "code" string } { "result" string } }
|
||
|
{ $description "Returns the output from a brainfuck program as a result string." }
|
||
|
{ $see-also run-brainfuck } ;
|