Waid is everything you never wanted. It's ugly, verbose and has a lot of arrows. It's currently implemented with a custom lexer and a LL(1) parser (recursive descent), although I would like to write a LL(1) parsing table in the future.
I'm working on a tree walking interpreter at the moment, but I'm planning to write a VM in Go in the future.
$ ./waid.rb
Usage: main [options] filename
-t, --show-tokens Print the tokens produced by the scanner
-a, --show-ast Print the AST produced by the parser
