niblet

From Esolang
Jump to navigation Jump to search

niblet is an esoteric programming language where nibbles are used to store data.

The project can be found on GitHub(dead link).

Terms

Term Definition
cell one of 30,000 locations data may be stored in a program
cell pointer the current location out of the 30,000 available cells
source pointer where the interpreter is in your program's source
stack temporary location where a value is stored before putting in or merging with a cell
putting storing the stack in the current cell before the current cell has been merged
merging storing the stack in the current cell already containing a value
token symbols used in the niblet language. see the "tokens" section for a list

Cells and the stack

Similar to brainfuck, niblet gives the programmer 30,000 cells to store data. There are a few ways data can be stored into the cell at the cell pointer:

  • putting using the Put token
  • merging using the Put token as well
  • input from the user using the Input token

Putting the stack in a cell, while the stack is a nibble, will be stored as a byte with four trailing zeros. For example, putting 1100 will be stored as 11000000.

Merging will perform the Bitwise OR operation on the current cell, which has four trailing zeros, with the stack, which has four leading zeros. For example, merging 11000000 (the current cell) and 1010 (the stack) will result in the current cell's value to be 11001010.

Once putting or merging has been completed, the Bitwise NOT operation will be performed on the stack. For example, after putting or merging a stack with the value of 1010, the stack will have the value of 0101.

If a cell has already been merged, the Put token will clear the current cell's value and put the stack rather than merging.

The Output token will print the value of the current cell as the character it represents.

Controlling pointers

Each time a command is run, the cell pointer is incremented by 1. The Back token may be used to return to the previous token, since it moves the cell pointer back twice.

Unlike other tokens, if a Back-source token is found by the interpreter, each proceeding Back-source token will be executed then skipped. This allows the creation of a loop using the Check token to go back multiple tokens.

Tokens

Token Name Description
< Back move the cell pointer back 2
[ Back-source move the source pointer back 1
$ Check only execute the following token if the cell at the cell pointer is not 0
, Input get input from user and store in the cell at the cell pointer
. Output output the data at the cell pointer
v Put store a nibble or merge with existing at the cell pointer
- Down decrease the stack by 1
+ Up increase the stack by 1

Examples

Cat

,<.<[[[[

Hello World

++++<<<<v<
---<<<v<.
-<v<
----<<<<v<.
----<<<<<v<
+++<<<v<.
+++<<<v<
+++<<<v<.
+++<<<v<
++++++<<<<<<v<.
++<<v<
-<v<.
-<v<
-------------<<<<<<<<<<<<<v<.
----------<<<<<<<<<<v<
---<<<v<.
--<<v<
++++++<<<<<<v<.
+++++++<<<<<<<v<
------<<<<<<v<.
-------<<<<<<<v<
+++<<<v<.
+++<<<v<
-----<<<<<v<.
---------<<<<<<<<<v<
------------<<<<<<<<<<<<v<.

Interpreter

  • Common Lisp implementation of the niblet programming language.