brain 0.1.2

Compiler for the brain programming language. Compiles brain into optimized brainfuck code. Also includes a brainfuck interpreter.
Documentation
// automatically determine the length of the right
a[] = "Hello, world\n";
// Outputs "Hello, world\n"
out a;
// error if rhs is not the length declared on the left
b[3] = "abc";
out "a: " a;
out "b: " b "\n";

// invalid because different sizes (addressed in #3)
//a = b;

// redeclaration of the same name with a different size is an error:
//a[1] = "q";
// Invalid:
//a[0] = "";

// copies a to a new variable c. c is the same size as a.
c[] = a;
out c;

// Invalid:
//a = a;

// Explicitly declaring the size here even though its a copy
d[3] = b;
out "d = " d " (should be abc)\n";

out "b = " b " (should be abc)\n";
b = "dbd";
out "b = " b " (should be dbd)\n";
b = d;
out "b = " b " (should be abc)\n";

// Should accept any [a-zA-z0-9_] as identifier names
// Cannot start with a number
qqq[] = "foo";
_bar[] = "bar";
// invalid:
//12abc[] = "fail";