bhyde / backward-parenscript

(not done!) Convert javascript (via parse-js) to parenscript thru the magic of optima.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

A fun boondoggle, toying with converting javascript into parenscript.

This works by parsing the javascript with parse-js and then walking the resulting s-expression using optima to convert it into parenscript.

It is quite incomplete, but I think the code is pretty.

backward-parenscript> (convert-to-parenscript "a[1].b.c.d(1).e(1).f")
(chain (aref a 1) b c (d 1) (e 1) f)
backward-parenscript> (ps* *)
"a[1].b.c.d(1).e(1).f;"
backward-parenscript> 
backward-parenscript> (convert-to-parenscript "if (a<b) {f(a)} else {f(b)};")
(progn (if (< a b) (f a) (f b)) nil)
backward-parenscript> (ps* *)
"if (a < b) {
    f(a);
} else {
    f(b);
};"
backward-parenscript> 
backward-parenscript> (convert-to-parenscript "function f(x) { var z = 1+x; g(z);}")
(defun f (x) (let ((z (+ 1 x))) (g z)))
backward-parenscript> (ps* *)
"function f(x) {
    var z = 1 + x;
    return g(z);
};"

Here's an example a bug. The handling of returns from functions needs some lov'n.

backward-parenscript> (convert-to-parenscript "function f(x) { return 1 + x;};")
(progn (defun f (x) (return (+ 1 x))) nil)
backward-parenscript> (ps* *)
; Warning: Returning from unknown block nilblock
; While executing: parenscript::return-exp, in process repl-thread(13).
"function f(x) {
    return 1 + x;
};"
backward-parenscript> 

About

(not done!) Convert javascript (via parse-js) to parenscript thru the magic of optima.


Languages

Language:Common Lisp 100.0%