ulng - The u language
A minimal computer language I wrote in June of 2010 to play around with a stack-based virtual machine (kind of). The output is very verbose and the only part that works right now is the interpreter - the compiler and the VM are not implemented, but the interpreter works fine :)
There are also some example programs that ship with the
source release, notably the counter.ul app
which lets the user enter a number and the program will
count from 1 to the given input and finally calculate
another value and output it as well (wow!).
Instruction set (version 0.1)
typedef enum {
XXX = 0,
NOP, /* no operation */
PSH, /* push <arg> */
POP, /* pop */
ADD, /* add */
MUL, /* multiply */
NEG, /* negate */
NOT, /* logical inversion */
DUP, /* duplicate */
XCH, /* exchange */
PRN, /* print */
INP, /* input */
CAL, /* call subroutine by name <arg> */
JMP, /* jump to label <arg> */
SIZ, /* skip instruction if zero */
ENT, /* enter function with variables: <arg> */
LVE, /* leave function, no return value */
RET, /* leave function, push top-of-stack to caller's stack */
LOA, /* load from local variable <arg> (zero-based) */
STO, /* store in local variable <arg> (zero-based) */
LAR, /* load argument <arg> (zero-based) */
PAR, /* pop <arg> (count) arguments from caller's stack */
EXI,
OP_COUNT,
} Op;
Downloads
Version 0.1 is the first and initial release. Its code has been written between 2010-06-16 and 2010-06-19, but it has only been published since December 2010.
- ulng-0.1.tar.gz (released 2010-12-07)
TODO
Lots. What I'd like to see in a future version should I ever happen to come around and implement it:
- ASCII characters (put character, ...)
- Strings (save string, print string, ...)
- Interactive interpreter mode
- Calling of C library functions by name
- Simple graphics output or curses