Syntax
The syntax of brainease code is similar to batch, because each instruction is in his line of code.
instruction 1
instruction 2
instruction 3
# and so on...
Indentation System
Some instructions may requires his owns inner code, like loop or if. In this case, you
can indent them with 2 spaces. No more, no less.
instruction 1
# This instruction belongs to the instruction 1 above.
# And may, or may not be executed
instruction 2
# And this to the instruction 2.
instruction 3
# This still belongs to the instruction 1
instruction 4
# And this one is outside the instruction 1 indentation scope.
instruction 5
Identifying Pointers, Cells, Numbers and Chars.
Brainease syntactically identifies pointers, cells and values by the following
rules:
-
*@is a raw pointer. It starts at0and can be incremented or decremented by thegotoinstruction. -
*<number>represents a memory cell. Ex:*2refers to the cell at the index 2. -
'<char>'is a character. It supports the\escape sequence and internally is converted to anumberby getting his ASCII code. Ex:'a'is converted to97, if needed. -
<number>is a raw number. Depending on the instruction, it can be used to increment a value, decrement or be a condition.
Learn by example
There are plenty examples at the examples folder. But this simpler one may help you to get started:
# This is a comment
# Empty lines are ignored
# This is also a multi-line comment
# Increments 123 in the current cell
inc 123 in *2
# If the cell 2 is bigger or equal to 120, then print the char 'H' to stdout.
if *2 >= 120
print 'H'
# This will move the pointer to the right until the pointer
# reaches a cell with a value of 0
loop *@
goto right
# this is a instruction
inc 123 in *2 # 123 is a raw number and *2 is a memory index
IDE Support
There is a plan to add support for VSCode with an official extension. But until then,
you can enable syntax highlighting for your favorite IDE by aliasing all .brain files to
the R Programming Language.
Here's an example of brainease code highlighted with R syntax:
print 'A'
inc 1 in *2
# Multi
# Line
# comment
loop *@
if *2 >= 17 # Some comment
exit
# Pointer
save 'a' at *@
goto left by 3