A LISP to Javascript compiler.
work in progress
a learning exercise
Read the accompanying blog post.
It uses PEG.js to parse the source to a Parser API compatible AST. The AST is then transformed to Javascript via escodegen.
It can optionally compress the output via Uglify.
Source:
(def name "honza")
(def greet
(fn [name]
(console.log "hey" name)))
(greet name)Output:
var name = 'honza';
var greet = function (name) {
return console.log('hey', name);
};
greet(name);Usage: inertia [options] <file...>
Options:
-h, --help output usage information
-V, --version output the version number
-t, --ast Print the AST
-o, --output [file] Redirect output to file
-c, --compress Minify with uglify
You can use the Makefile to install the dependencies:
$ make install
Or to build the compiler:
$ make
Or to build all the examples:
$ make example
deflist+,-,*,/,=,!=,<,>,<=,>=if(fn [] ...){},{"name" "honza"}- comments
;; let
- nth
- first
- rest
- second
- last
- partition
- cons
- conj
- get
- map
- filter
- update (update a key in a map
(update obj key value))
Note: The standard library functions are modelled after Clojure.
join two strings
export a name in a module
(expose "name" name)will compile to
module.exports['name'] = name;- Macro support
BSD, short and sweet
All feedback is most welcome. Open an issue for any purpose.