more
This commit is contained in:
parent
fc92d0abfc
commit
2c136222b5
|
@ -3,12 +3,16 @@
|
|||
(rename-out [basic-module-begin #%module-begin])
|
||||
(rename-out [basic-top #%top])
|
||||
(all-defined-out))
|
||||
(require (for-syntax racket/syntax))
|
||||
(require (for-syntax racket/syntax racket/list))
|
||||
|
||||
(define #'(basic-module-begin PARSE-TREE ...)
|
||||
#'(#%module-begin
|
||||
(println (quote PARSE-TREE ...))
|
||||
PARSE-TREE ...))
|
||||
(define-syntax (basic-module-begin stx)
|
||||
(syntax-case stx ()
|
||||
[(_ PARSE-TREE ...)
|
||||
(with-syntax ([(VARNAME ...) (map (λ(c) (format-id stx "~a" (integer->char c))) (range 65 91))])
|
||||
#'(#%module-begin
|
||||
(define VARNAME 0) ...
|
||||
(println (quote PARSE-TREE ...))
|
||||
PARSE-TREE ...))]))
|
||||
|
||||
; #%app and #%datum have to be present to make #%top work
|
||||
(define #'(basic-top . id)
|
||||
|
@ -44,18 +48,18 @@
|
|||
(define vars (make-hasheq))
|
||||
|
||||
(define-cases #'statement
|
||||
[#'(statement ID "=" EXPR) #'(hash-set! vars 'ID EXPR)]
|
||||
[#'(statement ID "=" EXPR) #'(set! ID EXPR)]
|
||||
[#'(statement PROC ARG ...) #'(PROC ARG ...)])
|
||||
|
||||
(define-cases #'value
|
||||
[#'(value "(" EXPR ")") #'EXPR]
|
||||
[#'(value ID "(" ARG ... ")") #'(ID ARG ...)]
|
||||
[#'(value ID-OR-DATUM) #'(hash-ref vars 'ID-OR-DATUM (λ _ ID-OR-DATUM))])
|
||||
[#'(value ID-OR-DATUM) #'ID-OR-DATUM])
|
||||
|
||||
(define-cases expr
|
||||
[(_ lexpr op rexpr) (if (op lexpr rexpr)
|
||||
1
|
||||
0)]
|
||||
1
|
||||
0)]
|
||||
[(_ expr) expr])
|
||||
(provide < > <= >=)
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user