A (semi-)toy compiler from a sexp-syntax to javascript.
Primarily weekend hacking. Secondarily because parenscript, which you should probably use, does not expose ES6 (and later) features yet.
This project
The intent is to create a multi-pass compiler which expands the AST (possibly caching the result), then pass the resulting AST to a code-emitter which, given a set of emit-functions, translates forms to equivalent JS syntax.
The core AST-manipulation functions are in ast.lisp
- user-supplied rules determine how the AST is rewritten and a convenient wrapper function allows supplying multiple sets of rules to rewrite the AST over multiple passes.
The core code emitter is inspired by Pratical Common Lisp - Chapter 30 - An HTML Generation Library and lives in emitter.lisp
.
The functions which generate the Javascript code are in emitjs.lisp
, the core routines traverse an AST and emits code as dictated by a set of emit-functions using the code emitter.
The idea is to make the compiler simple to understand and easy to extend.
Very far from finished. Though it contains
- a decent code emitter inspired by
- a function for rewriting an AST based on the supplied rules (expressed as functions)
GPL-3.0-only