This is a fun absurd interpreter for a mini language.
The parser is implemented in Ruby using a s-expression parser SXP, the type checker/compiler is written in Java and the interpreter in JavaScript
A program consists of a list of statements. Currently, there are functions, if statements, let statements and print statements.
The language supports numbers (double precision floating point), strings and bools.
Functions are defined using fun
. They take in a name, a list of params,
and a body. Params are a name/type pair. The function body is a list of
statements.
(
(fun foo ((n number) (b number))
(
(print (* n b))
)
)
)
Let statements are defined using let
. They take in a name and an expression.
(
(let a (* 25 (/ 30 10)))
)
Print statements are defined using print
. They take in a single expression.
(
(print "foobar")
)
If statements are defined using if
. They take in a condition, and
a then block with an optional else block.
(
(if (< 10 20) (print "10 < 20"))
(if (< 21 20) (print "21 < 20") (print "21 > 20"))
)
Before running, you should have Graal with Ruby, JavaScript and Java
all installed. Also, please make sure to run bundle install
to install sxp
.
Compiling is simply:
javac -Xlint:unchecked -classpath src/ src/Main.java
and running:
java -classpath src/ Main <source_file>
Where <source_file>
is a file containing the source code.
Check out examples/
for, well, examples.
javac
and java
must be the Graal versions, of course.
NOTE: You must run the code from the root directory as it loads files via relative paths.