aboutsummaryrefslogtreecommitdiff
path: root/rip-lang.txt
blob: 9c08942d55b29202aa089af936421739d9d3621f (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
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: + - * / (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
	D3ra
1]


Cat:

gD0dEnW[ogD0dEn]