38 lines
941 B
Racket
38 lines
941 B
Racket
#lang br/quicklang
|
|
(require syntax/parse/define)
|
|
|
|
(define paperwidth #f)
|
|
(define paperheight #f)
|
|
(define (set x y) (set! x y))
|
|
(define (add x y) (+ x y))
|
|
|
|
(provide (matching-identifiers-out #rx"^u-" (all-defined-out)))
|
|
(define-macro (u-id ID)
|
|
#'(string->symbol ID))
|
|
|
|
|
|
(define-macro (u-atom ITEM...)
|
|
#'ITEM...)
|
|
(define-macro (u-number NUM...)
|
|
#'(number->string NUM...))
|
|
(define-macro (u-converting-num NUM...)
|
|
#'(string->number NUM...))
|
|
|
|
(define-macro-cases u-expr
|
|
[(u-expr (u-atom ITEM)) #'ITEM]
|
|
[(u-expr (u-converting-num (u-number NUM))) #'NUM]
|
|
[(u-expr X) #'X])
|
|
|
|
(define-macro-cases u-sexp
|
|
[(u-sexp (u-expr (u-atom (u-id "set"))) X Y) #'(set! X Y)]
|
|
[(u-sexp X Y) #'[X Y]]
|
|
[(u-sexp REQ OPT ...)
|
|
#'(let ([head REQ])
|
|
(eval `(,head OPT ...)))]
|
|
)
|
|
|
|
(define-macro (u-module-begin (u-program LINE ...))
|
|
#'(#%module-begin
|
|
LINE ...))
|
|
|
|
(provide (rename-out [u-module-begin #%module-begin]))
|