FORTH-ish interpreter
.gitignore | ||
builtins_test.go | ||
builtins.go | ||
eval.go | ||
flags.go | ||
go.mod | ||
main.go | ||
mem_test.go | ||
mem.go | ||
README.md | ||
stack_test.go | ||
stack.go | ||
words_test.go | ||
words.go |
Prosper
Prosper is a Forth-like stack-based language. While taking specific influence from Forth, it does not attempt to emulate or implement the ANS Forth standards.
Currently, the language is entirely interactive -- to explore, simply run go run .
in the root of this project and an interactive session will begin.
Syntax
Prosper is stack-based, as mentioned, so all the standard stack semantics are present:
> 1 2 3 4 + * -
ok
> .
-13 ok
New words can be defined using : ;
:
> : SQUARE DUP * ;
ok
> 10 SQUARE .
100 ok
It has a single loop construct, DO LOOP
:
> : TOFIVE 5 0 DO I . LOOP ;
ok
> TOFIVE
0 1 2 3 4 ok
Branches using IF ELSE THEN
work:
> : EMOJI 0 < IF 128201 EMIT ELSE 128200 EMIT THEN ;
ok
> 100 EMOJI
📈 ok
> -100 EMOJI
📉 ok
Here's a Fibonacci implementation:
> : FIB 2DUP + ;
ok
> : FIBN 0 1 ROT 1 DO FIB ROT DROP LOOP SWAP DROP ;
ok
> 10 FIBN .
55 ok
Propser also has a basic off-stack memory model using variables and pointers:
> VARIABLE FOO
ok
> 10 FOO !
ok
> FOO @
ok
> .
10 ok
And, of course, it knows how to quit:
> BYE
bye
Future Plans
- Implement
CONSTANT
- Implement loading libraries of pre-written functions both from the command-line and at run-time
- Add much better readline behaviors in the interactive console (up-arrow for history, cursor movement...)