YABALL
From Esolang
YABALL is a language inspired by Brainfuck, invented by Jannis Harder in 2005. Its aim is to add a more obscure code flow to Brainfuck. YABALL has a 2-dimensional code flow and 2 different flow modes. It's an acronym for Yet Another Brainfuck A Like Language. By an impossible accident the name YABALL has the same pronounciation as the Polish word for a cheap apple wine.
Contents |
[edit] Commands
Normal-mode commands:
| Command | Description |
|---|---|
| + | Increment the current cell. |
| - | Decrement the current cell. |
| > | Move to the next cell. |
| < | Move to the previous cell. |
| [ | If current cell is 0 nop, else go down. |
| ] | Go up and change to reverse-mode. |
| , | Input to the current cell. (see Misc Input & Output) |
| . | Output the current cell. (see Misc Input & Output) |
| ? | Change to reverse-mode. |
| ^ | Go up. |
| v | Go down. |
| @ | Quit the program. (Current cell is the exit code) |
Reverse-mode commands:
| Command | Description |
|---|---|
| ! | Change to normal-mode. |
| 9 | Go up. |
| 6 | Go down. |
All other commands are nop.
[edit] Modes
There are two different modes, which have their own command-set:
[edit] Normal-mode
The normal-mode is for calculations, input/output and code flow. In normal-mode the current command is executed and the program-pointer moves right. (E.g. + is: Increment the current cell and go right)
Note: ] switches in reverse-mode so it moves left and not right
[edit] Reverse-mode
The reverse-mode is for Loops and code flow. It acts like the normal-mode but moves left after the current command.
[edit] Code flow
The code filled with spaces, until all lines have the same length. If the program-pointer reaches the right end of a line, it wraps to the left of the next line. If the program-pointer reaches the left end of a line, it wraps to the right end of the previous line. The last line wraps to the first and reverse.
The use of mode switching and wrapping is a sign for good YABALL coding style.
[edit] Misc
[edit] Cell size
The cell size is 16 bit
[edit] Input & Output
Input returns -1 on EOF.
Output outputs a byte to stdout if the current cell is less than 256. If the current cell is less than 512, the value-256 is written to stderr. 512 closes stdout and 513 closes stderr. Values from 514 to 32767 inclusive are reserved for future extensions. Other values may be used for anything.
[edit] Examples
Cat (mode switching):
!,+[@ !-.]?
Cat (wrapping):
,+[@ -v ^ .
[edit] Computational class
YABALL is Turing-complete as there are two ways converting a Brainfuck program into a YABALL program.
[edit] External resources
- Original interpreter by Jannis Harder, written in Ruby.

