aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: 8d20d91361a96008e473d36c5be3f78eb640a587 (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
52
53
54
55
56
57
58
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
- `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<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]
```