A Nybblang program is composed of four bits—a nybble. Each command is two bits long, therefore a program has two instructions.
Nybblang uses a stack of nybbles. When a digit is pushed to it, it first goes into a temporary variable, which will also hold the next two digits pushed. When it reaches four digits—a nybble—that nybble will be pushed to the stack and the temporary variable set to 0 (0000).
The interpreter should be given these command-line arguments:
main *others, where
main is the filename of the first program to be run and
others are the programs in the sequence. Alternatively, a directory may be supplied with the programs in it as these files, e.g.
Program import sequence
If the interpreter is run with
nybblang main.nyb sub1.nyb sub2.nyb, then
main.nyb is run first, and the running sequence (for the
11 command) is
main.nyb, sub1.nyb, sub2.nyb, main.nyb, sub1.nyb, sub2.nyb, main.nyb, ..., wrapping and repeating forever.
|00||Push 0 to the memory|
|01||Push 1 to the memory|
|10||Output the Nth character of the sequence |
|11||Import the next program in the sequence (wrapping)|
1 characters in the source code raise an error.
Each file in the sequence is on a different line; these files are arranged in sequential order.
0111 0011 0011 0111 1011 0111 0011 0011 0011 1011 0111 0011 0111 0111 1011 0111 0011 0111 0111 1011 0011 0011 0111 0010
If a Nybblang program could be of infinite length, then imports would be unnecessary, so the command
11 could be turned into a (1-index-based) conditional jump:
IF stack.bottom > 0 THEN GOTO instruction n where n is the item directly on top of the bottom of the stack (or the bottom of the stack if the stacks has only 1 item), and if n is 0 or greater than the program’s length then the program should exit. From what I understand, this would make Nybblang Turing-complete. Here's a truth-machine in this version of the language that outputs E or T instead of 0 or 1:
Replace both of the
0 for input 0 or
1 for input 1. If you use
1, the stack would infinitely grow larger as there are two PUSH operations but only one POP.