blob: 2ddc1edf4e46b523890d072510b72afe2c8a6e48 (
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
48
49
50
51
|
Rip -- a stack-based rip language
=================================
All stack items are integers, of unspecified but reasonable size
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<bla>[code]: define a function named "bla" with the body "code"
<bla>: call the function named "bla"
$: outputs a stackdump
whitespace: nop
'c: pushes the ascii value of c
#<file.rip>: 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]
|