Skip to content

rkrupinski/clojure-lite

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

clojure-lite

Disclaimer: this is a super-immature toy project :bowtie:

clojure-lite compiles an extremely small subset of clojure to JavaScript. That's pretty much all it does. Have fun!

It currently lets you:

  • define and refer variables
  • define and call functions

Other quirks:

  • the standard library is limited to +, -, *, and /
  • there's only one type: number

Example

(def PI 3.141592653589793)
(defn area [radius] (* PI radius radius))
(area 5)

is compiled to:

const __lib = {};
__lib['*'] = function (...args) {
  return args.reduce((acc, curr) => acc * curr, 1);
};
let PI = 3.141592653589793;
function area(radius) {
  return __lib['*'](PI, radius, radius);
}
area(5);

Usage

Programmatic:

$ npm install clojure-lite --save
const cl = require('clojure-lite');

const compile = _.compose(
  cl.codegen,
  cl.parser,
  cl.lexer
);

const code = compile('(def answer 42)');

CLI:

$ npm install -g clojure-lite
$ echo '(def answer 42)' | cl > code.js

Credits

  • lexer heavily inspired by [click].
  • parser & codegen heavily inspired by [click].

About

Compiles an extremely small subset of clojure to JavaScript

Resources

Stars

Watchers

Forks

Packages

No packages published