Home

Awesome

Brackets

Brackets is an esoteric stack-based programming language. A little bit confusing, because consists only of 4 unique characters. The language uses Instruction Modification Parameter (IMP) and was heavily inspired by whitespace.

 

Syntax

IMPMeaning
()Stack Manipulation
{}Arithmetic
[]Flow Control
<>Input / Output
IMPCommandParameterMeaning
()()NumberPush the number onto the stack
(){}-Duplicate the top item on the stack
()[]-Swap the top two items on the stack
()<>-Discard the top item on the stack
{}()-Pop a and b and push a + b
{}{}-Pop a and b and push a * b
{}[]-Pop a and b and push b / a rounded down
{}<>-Pop a and b and push b % a
[]()-Pop a, if (top == a) { ... }
[]{}-Pop a, if (top != a) { ... }
[][]-Pop a, while (top != a) { ... }
[]<>-Exit the program
<>()-Pop c and output c as a character
<>{}-Pop n and output n as a number
<>[]-Read c and push it onto the stack as a character
<><>-Read n and push it onto the stack as a number

Numbers

Numbers in Braces are in binary, where () represents 0, and {} represents 1. The first bit tells us if the number is positive -(), or negative -{}. Numbers have to end with an opening arrow bracket <.

Here is an example:

(){}(){}()< => 0-1010 => 10
{}{}(){}()< => 1-1100 => -12

Any characters other than brackets, are simply ignored.

 

Examples

Alphabet

The following program prints the whole english alphabet.

()() (){}{}()()()(){}<   push 97 'a'
()() (){}{}{}{}(){}{}<   push 123 'z' + 1
[][]{                    while top != 123:
  (){}                      dup
  <>()                      printn
  ()() (){}<                push 1
  {}()                      add
}

Loops

Simple while loop:

()() (){}{}()(){}()()<   push 100
()() ()()<               push 0
[]<>{                    while top != 0 do top /= 2:
  (){}                      dup
  <>{}                      printn
  ()() (){}(){}()<          push 10 '\n'
  <>()                      printc
  ()() (){}()<              push 2
  {}[]                      div
}

Statements

Simple if statements:

()() (){}<     push 1
()() ()()<     push 0
[](){          if 1 == 0:
  ()() (){}<      push 1
  <>{}            printn
}

()() (){}<     push 1
()() ()()<     push 0
[]{}{          if 1 != 0:
  ()() {}{}<      push -1
  <>{}            printn
}

Simple if-else statement:

()() (){}{}<   push 3
()() (){}<     push 1
[](){          if 3 == 1:
  ()() (){}<      push 1
  <>{}            printn
  ()() (){}<      push 1
}
()() (){}<     push 1
[]{}{          if 3 != 1:
  ()() {}{}<      push -1
  <>{}            printn
}

You can find more examples on the online Brackets interpreter below.

 

Interpreter

Try out official Brackets interpreter online.