27 lines
992 B
Racket
27 lines
992 B
Racket
#lang racket/base
|
|
|
|
(require honu/core/private/syntax
|
|
honu/core/private/parse2
|
|
(for-syntax honu/core/private/parse2)
|
|
honu/core/private/literals
|
|
(for-syntax honu/core/private/compile)
|
|
(for-syntax racket/base)
|
|
(for-syntax (prefix-in parse: syntax/parse))
|
|
(prefix-in parse: syntax/parse))
|
|
|
|
(define-honu-syntax syntax-parse
|
|
(lambda (code)
|
|
|
|
(parse:define-splicing-syntax-class a-pattern #:literals (cruft)
|
|
[parse:pattern (parse:~seq var:parse:id %colon class:parse:id)
|
|
#:with pattern #'(parse:~var var class #:attr-name-separator "_")])
|
|
|
|
(parse:syntax-parse code #:literals (cruft)
|
|
[(_ data:honu-expression (#%braces (#%brackets something:a-pattern action:honu-delayed) ...) . rest)
|
|
(define output
|
|
(racket-syntax (parse:syntax-parse data.result
|
|
[(something.pattern) action.result] ...)))
|
|
(values output #'rest #t)])))
|
|
|
|
(provide syntax-parse)
|