blob: 75ed5bf40bb743826d7de96d58480fe24bcf5e5b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
Rip -- a stack-based rip language
=================================
All stack items are integers, of unspecified but constant size
0-9: push value
P: pop
S: swap
D: duplicate
i: increment
d: decrement
r: pops the number of items to rotate clockwise
R: pops the number of items to rotate anti-clockwise
a s m q: + - * / (add, subtract, multiply, quotient (integer))
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<bla>[code]: define a function named "bla" with the body "code"
<bla>: call the function named "bla"
$: outputs a stackdump
whitespace: nop
Any error causes the interpreter to exit, saying "rip".
Example code
------------
Fibonacci:
01
1W[
DO
9io
D3r+
1]
Cat:
gD01sEnW[ogD01sEn]
|