Boxes
Boxes is an esoteric programming language created by User:Dominicentek. It's code is stored in several boxes which can be put anywhere in the source code.
Boxes
How does a box look like
/- BoxName -------------\ | instruction parameter | | ... | \-----------------------/
How do they work
If a box has an incorrect syntax, it's ignored. Each box can hold one value, which can be a string or integer. Default value is a 0. The interpreter initially executes a box with a name of Main
. If it cannot find that box, the program simply exits. When a bottom of the box is reached, it executes again.
Instructions
Inside the boxes, several instructions can be put.
Instruction | Syntax | Description |
---|---|---|
open | <box name> | Acts like a goto statement. Code immediately jumps into that box |
close | Closes current box and returns to previous box. If it's in main box, it exits the program. | |
openwith | <box name> | Exactly like open instruction, but it stores the value from the current box to the next box. |
return | Exactly like close instruction, but it stores the value from current box to the previous box. | |
if | <value> <is|not|greater|less> <value> <open|openwith> <box name> | Performs an if statement. If it succeeds, a box gets opened. |
else | <open|openwith> <box name> | If the above if statement fails, this box gets opened instead |
Instructiton | Syntax | Description |
---|---|---|
assign | <value> | Assigns a new value to the current box. |
toint | Converts the current value into an integer. | |
tostr | Converts the currrent value into a string. | |
numinput | Takes input from user as a number. | |
input | Takes input from usuer as a string. | |
increase | <value> | If the value is an integer, it increases it's value by specified value. |
decrease | <value> | If the value is an integer, it decreases it's value by specified value. |
multiply | <value> | If the value is an integer, it multiplies it's value with specified value. |
divide | <value> | If the value is an integer, it divides it's value with specified value. |
modulo | <value> | If the value is an integer, it modules it's value with specified value. |
Instruction | Syntax | Description |
---|---|---|
<value> | Prints a value in the console. | |
println | <value> | Prints a value with a new line to the console. |
exit | Exits the program. |
Boxes also have a global stack which can be accessed from any box.
Instruction | Syntax | Description |
---|---|---|
push | <value> | Pushes a value onto the stack |
pop | Pops the value off the stack | |
get | Pops the value off the stack and sets it as a box value | |
duplicate | Duplicates the top value on the stack | |
swap | Swaps the 2 items on top of the stack | |
reverse | Reverses the order of the stack |
Values
Values hold data used as parameters in instructions. If it's a valid number, it's an integer constant. If it's text surrounded by double quotes, it's a string constant. If the value is this
, then it returns value current box holds, otherwise it is treated like a box name and it returns a value from the box specified.
Examples
Hello World
/- Main ----------------\ | print "Hello, World!" | | exit | \-----------------------/
Truth Machine
/- Main -----------------------\ | numinput | | if this is 0 open PrintZero | | else open PrintOne | \------------------------------/ /- PrintZero -\ | print 0 | | exit | \-------------/ /- PrintOne -\ | print 1 | \------------/
99 Bottles of Beer
/- Main ----------\ | assign 99 | | openwith Print | \-----------------/ /- Print -----------------------------------------------------\ | print this | | print " bottles of beer on the wall,\n" | | print this | | print " bottles of beer.\nTake one down, pass it around,\n" | | decrease 1 | | print this | | print " bottles of beer on the wall.\n\n" | | if this is 0 open Exit | \-------------------------------------------------------------/ /- Exit -\ | exit | \--------/