SlothLang is an esoteric programming language by Aaron Goidel
- Write code in a highly efficient and easy to read language
- Slothy sloths are slothy
SlothLang is parsed and executed in C.
And of course the code behind the SlothLang VM itself is open source and can be found on GitHub.
A Sloth program is parsed as new-line deliminated instructions. Every line starts a new instruction at 0x00
. Each occurrence of the word sloth
on a line increases the instruction code by one. At the end of each line the resulting instruction code is pushed and the next line is read.
Since a Sloth command is generally based on the number of times the word sloth appears in a row, the syntax will be documented as a multiplication. For example the documentation sloth * 3
means sloth sloth sloth
in Sloth code.
To save time and effort, there are a few commands which do not follow the scheme outlined above. These will be outlined below.
Note: the and
operator is used to separate arguments.
Syntax: nap
Effect: will terminate the execution of the program and return the top element from the stack.
NOTE: every Sloth file must end in nap
.
Syntax: sloth * 2
Effect: pops the first two values off the stack and pushes their sum.
Stack: S, x, y -> S, x+y
Syntax: sloth * 3
Effect: pops the first two values off the stack and pushes their difference.
Stack: S, x, y -> S, x-y
Syntax: sloth * 4
Effect: pops the first two values off the stack and pushes their product.
Stack: S, x, y -> S, x*y
Syntax: sloth * 5
Effect: pops the first two values off the stack and pushes their quotient.
Stack: S, x, y -> S, x/y
NOTE: Division in SlothLang is integer division, meaning divide will always round fractions down. e.g. 3/2 = 1
Syntax: sloth * 6 and sloth * c
Notice that the compare instruction requires an argument. The number of sloths after the
and
will determine which comparison should be made. See Comparison Codes for reference.
Effect: pops the first two values off the stack and pushes the truthiness of a comparison between them.
Stack: S, x, y -> S, 1 if true 0 if false
Syntax: sloth * 7 and sloth * t
The input instruction takes a type code to determine what kind of data is being read. See Type Codes for reference.
Effect: reads in either an integer or an ASCII character from standard in.
Stack: S -> S, x
Syntax: sloth * 8 and sloth * t
The output instruction takes a type code to determine what kind of data is being displayed. See Type Codes for reference.
Effect: pops the top value off the stack and writes it to standard out.
Stack: S, x -> S
Syntax: sloth * 9 and sloth * n
The GOTO instruction takes a number of sloths as the destination if the result is true.
Effect: pops the top value off the stack, if the value is 1, the program counter is set to specified instruction, else continues as normal.
Stack: S, x -> S
Syntax: slothy sloth * i
Effect: pushes the integer value of the number of sloths following slothy onto the stack.
Stack: S -> S, x
Example: slothy sloth sloth sloth
pushes 3 onto the stack.
Syntax: sloth * 10
Effect: pops an element off the stack and pushes it twice.
Stack: S, x -> S, x, x
SlothLang relies on the translation of a number of sloths to a numeric code in order to perform specific operations.
The Compare function uses <c>
sloths in order to select what kind of comparison is being made.
Comparison Code | Operation |
---|---|
0x01 |
x == y |
0x02 |
x != y |
0x03 |
x < y |
0x04 |
x <= y |
0x05 |
x > y |
0x06 |
x >= y |
Type Codes <t>
are used in the Input and Output instructions in order to determine what kind of data is being read or written.
Type Code | Type of I/O |
---|---|
0x01 |
A signed integer value |
0x02 |
A single ASCII character |
Sloth code is read in by the SlothVM as bytecode. The following is the bytecode for each SlothLang instruction.
Byte Code | Name |
---|---|
0x00 |
Exit |
0x01 |
Push <i> |
0x02 |
Add |
0x03 |
Subtract |
0x04 |
Multiply |
0x05 |
Divide |
0x06 |
Compare <c> |
0x07 |
Input <t> |
0x08 |
Output <t> |
0x09 |
GOTO <o> |
0x0A |
DUP |
This project is licensed under the MIT License - see the LICENSE file for details
- Mariana Ortiz Luna for the awesome logo