FORAY is a stack based or concatenative langauge inspired by Forth and Min (which is inspired by Forth, Factor, and Joy)
Foray files have the extension .fr
Read FORAY.md for the language design and basics.
Clone the project then run zig build
to compile or zig build run
to compile and run. Running with no arguments launches a repl. Running with a file given as an argument will look for and run that file.
- Lexer (still have to parse chars and strings)
- Parser
- Evaluater
- Basic Evaluation
- Builtin operator functionality (WIP)
- Repl
- Basic REPL
- Features like history, etc
- Standard Library
- Actual error handling and not just a bunch of
try
's
> 10 :x
=>
> x
=> 10
> (2 *) :double
=>
> 2 double;
=> 4
Prefixing the :
to a symbol means to create a word in the dictionary and assign the top of the stack as its value.
Putting items between parenthesis '(' and ')' is to create a quoted list. Putting the ';' after a list means to unquote and apply it.
So what's happening is, you assign a list to a word, push the contents of the word onto the stack, then evaluate the list.
( dup 1 <=
(drop 1)
(dup 1 - dup rot * swap 1 - fac; *)
if
) :fac