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 - `R`: pops the number of items to rotate clockwise - `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 - `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 - `#`: 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: ``` gD0dEnW[ogD0dEn] ```