blob: e26fd8990459e4a1158576c118df3f2bc050a122 (
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
|
require "big.cr"
module False
enum Command
DUP # ( n -- n n )
DROP # ( n1 n2 -- n1 )
SWAP # ( n1 n2 -- n2 n1 )
ROT # ( n1 n2 n3 -- n2 n3 n1 )
PICK # push the n-th stack item (top of stack is index 0)
ADD # ( n1 n2 -- (n1+n2) )
SUBTRACT # ( n1 n2 -- (n1-n2) )
MULTIPLY # ( n1 n2 -- (n1-n2) )
DIVIDE # ( n1 n2 -- (n1/n2) )
NEGATE # ( n1 -- (-1*n1) )
BAND # ( n1 n2 -- (n1&n2) )
BOR # ( n1 n2 -- (n1|n2) )
BNOT # invert each bit of top of the stack
GREATER # ( n1 n2 -- (n1>n2) )
EQUAL # ( n1 n2 -- (n1==n2) )
EXECUTE # lambda execution
CONDITIONAL # ( cond lambda -- ... ) execute lambda if cond is true, pops both
LOOP # ( cond lambda -- ... ) execute lambda repeatedly until cond is false, then pop both
STORE # ( value reference -- ) stores value at the given variable reference, pops both
FETCH # ( reference -- ) pops the reference and pushes the value stored at the reference
READ # read character from STDIN and push its character code
WRITE_CHAR # pop the stack and print the value's character ("65," prints "A")
WRITE_INT # pop the stack and print the value as an integer ("65." prints "65")
FLUSH # flush input and output buffers
end
alias PushInt = BigInt # int literal pushes int
alias PushCharCode = Char # char literal ( 'c ) pushes char
alias PushVarRef = Char # variable name pushes its address
alias WriteString = String # string literal prints the string
alias Operation = Command | PushInt | PushCharCode | PushVarRef | WriteString
end
|