diff --git a/pkgs/racket-doc/syntax/scribblings/parse/define.scrbl b/pkgs/racket-doc/syntax/scribblings/parse/define.scrbl index e9ff0306e1..d04bbda69c 100644 --- a/pkgs/racket-doc/syntax/scribblings/parse/define.scrbl +++ b/pkgs/racket-doc/syntax/scribblings/parse/define.scrbl @@ -37,3 +37,25 @@ Defines a macro named @racket[macro-id]; equivalent to the following: ] } + +@defform[(define-syntax-parser macro-id parse-option ... clause ...+)]{ + +Defines a macro named @racket[macro-id]; equivalent to: + +@racketblock[ +(define-syntax macro-id + (syntax-parser parse-option ... clause ...)) +] + +@myexamples[ +(define-syntax-parser fn3 + [(fn3 x:id rhs:expr) + #'(lambda (x) rhs)] + [(fn3 x:id y:id rhs:expr) + #'(lambda (x y) rhs)]) +((fn3 x x) 17) +((fn3 a b (+ a b)) 3 4) +(fn3 1 2) +(fn3 a #:b 'c) +]} + diff --git a/racket/collects/syntax/parse/define.rkt b/racket/collects/syntax/parse/define.rkt index 049551b7fc..97c201000b 100644 --- a/racket/collects/syntax/parse/define.rkt +++ b/racket/collects/syntax/parse/define.rkt @@ -3,6 +3,7 @@ syntax/parse "private/sc.rkt")) (provide define-simple-macro + define-syntax-parser (for-syntax (all-from-out syntax/parse))) (define-syntax (define-simple-macro stx) @@ -12,3 +13,8 @@ (syntax-parser/template #,((make-syntax-introducer) stx) [pattern . body]))])) + +(define-simple-macro (define-syntax-parser macro:id option-or-clause ...) + (define-syntax macro + (syntax-parser option-or-clause ...))) +