69 lines
1.2 KiB
Racket
69 lines
1.2 KiB
Racket
#lang racket/base
|
|
|
|
(define-syntax js-let
|
|
(syntax-rules ()
|
|
((_ (a b))
|
|
(string-append "let " (js1 a) " = " (js1 b) ";\n")
|
|
)
|
|
)
|
|
)
|
|
|
|
(define-syntax js1
|
|
(syntax-rules (if let* *)
|
|
((_ (if cond body1 body2))
|
|
(string-append "if (" (js1 cond) ") then {\n"
|
|
(js1 body1) "; }\n"
|
|
"else {\n"
|
|
(js1 body2)
|
|
"; }\n"
|
|
)
|
|
)
|
|
((_ (let (a ...)))
|
|
(string-append
|
|
(js-let a)
|
|
...)
|
|
)
|
|
((_ a)
|
|
(format "~a" 'a))
|
|
)
|
|
)
|
|
|
|
#|
|
|
((_ (if cond
|
|
body1
|
|
body2))
|
|
(string-append "if ("
|
|
(js1 cond) ") then {\n"
|
|
(js1 body1) " }\n"
|
|
"else { \n"
|
|
(js1 body2)
|
|
" }\n"
|
|
)
|
|
)
|
|
((_ (let ((a b) ...)
|
|
body))
|
|
(string-append "let " (js1 a)
|
|
" = " (js1 b) ";\n")
|
|
...
|
|
)
|
|
((_ (* a b ...))
|
|
(string-append (js1 a) "*" (js1 b) ...))
|
|
((_ a)
|
|
(format "~a" 'a))
|
|
)
|
|
)
|
|
|#
|
|
|
|
(define-syntax js
|
|
(syntax-rules ()
|
|
((_ js-statement ...)
|
|
(string-append
|
|
"{ \n"
|
|
(js1 js-statement)
|
|
...
|
|
"}\n"
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|