Rip — a stack-based rip language ================================= All stack items are signed bigints. - `0-9`: push value - `P`: pop - `S`: swap - `D`: duplicate - `i`: increment - `d`: decrement - `r`: pops the number of items to rotate anti-clockwise ("insert") - `R`: pops the number of items to rotate clockwise ("extract") - `l`: push length of stack (before this push) - `a` `s` `m` `q` `M` `p`: `+` `-` `*` `/` `%` `^` (add, subtract, multiply, quotient (integer), modulo, power) - `G` `L` `E`: greater, less, equal; booleans are 1 and 0, as you expect - `n`: not; equivalent to 0E - `[ ... ]`: syntactical; a codeblock - `I`: pops boolean, conditionally executing the codeblock that should follow the I, depending on the boolean (aka "if") - `W`: I, but then "while" instead of "if" - `o`: outputs the top value as an ascii char - `O`: outputs the top value as a number - `g`: gets a character and pushes the ascii value - `C`: open a socket connection to specified ip address, in 32- or 128-bit format for ipv4 or ipv6 resp., and port. Returns identifier - `w`: takes identifier and char; writes char to specified socket (leaves socket on stack) - `t`: takes identifier; takes char from specified socket and pushes it (leaves socket on stack) - `c`: takes identifier; closes that connection - `F[code]`: define a function named "bla" with the body "code" - ``: call the function named "bla" - `$`: outputs a stackdump - whitespace: nop - `'c`: pushes the ascii value of c - `"abcde"`: `'a'b'c'd'e` - `#`: literally includes contents of 'file.rip' in-place Any error causes the interpreter to exit, saying "rip". Example code ------------ Fibonacci: ``` 01 1W[ DO 9io D3ra 1] ``` Cat: ``` gDiW[ogDi] ```