racket/collects/honu/syntax-parse.rkt

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)