It's a turing tarpit, but one not very complicated at that (for something more esoteric see Malbolge or Whitespace).
The language is very simple, it has eight instructions. So I had to write a compiler for it. It turns out to be quite easy to do:
import static java.lang.System.out;
public class BrainFk
{
public static void main(String[] args) {
out.println("public class " + args[0] + "{");
out.println("public static void main(String args[]) throws Throwable {");
out.println("int[] memory = new int[30000];");
out.println("int data = 0;");
final String code = args[1];
for(int i = 0; i < code.length(); i++) {
char c = code.charAt(i);
switch(c) {
case '>':
out.println("++data;");
break;
case '<':
out.println("--data;");
break;
case '+':
out.println("++memory[data];");
break;
case '-':
out.println("--memory[data];");
break;
case '.':
out.println("System.out.print((char)(0xFF & memory[data]));");
break;
case ',':
out.println("memory[data] = System.in.read();");
break;
case '[':
out.println("while(memory[data] != 0) {");
break;
case ']':
out.println("}");
break;
}
}
out.println("}}");
}
}
You can use it to compile the hello world sample from the Wikipedia page:
~>java BrainFk Hello "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>." > Hello.java ~>javac Hello.java ~>java Hello Hello World!
Sometime I'll have to post the Forth interpreter in Java I wrote (I know some might consider sacrilege to use both languages in the same sentence, but you can't please everyone!).