From c618ec803a6a67c01a9ce214b6403d0e8271022b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Georges=20Dup=C3=A9ron?= Date: Tue, 26 Mar 2019 17:20:10 +0100 Subject: [PATCH] Merge pull request #1691 from jsmaniac/syntax-parse-regexp Adds built-in syntax classes which match regular expressions --- pkgs/racket-doc/syntax/scribblings/parse/lib.scrbl | 5 ++++- racket/collects/syntax/parse/private/lib.rkt | 12 ++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/pkgs/racket-doc/syntax/scribblings/parse/lib.scrbl b/pkgs/racket-doc/syntax/scribblings/parse/lib.scrbl index 05e082433a..59ce9ec8db 100644 --- a/pkgs/racket-doc/syntax/scribblings/parse/lib.scrbl +++ b/pkgs/racket-doc/syntax/scribblings/parse/lib.scrbl @@ -37,7 +37,9 @@ actually a valid expression. @defstxclass[integer] @defstxclass[exact-integer] @defstxclass[exact-nonnegative-integer] -@defstxclass[exact-positive-integer])]{ +@defstxclass[exact-positive-integer] +@defstxclass[regexp] +@defstxclass[byte-regexp])]{ Match syntax satisfying the corresponding predicates. } @@ -59,6 +61,7 @@ and bytes, respectively. @defstxclass[id]{ Alias for @racket[identifier]. } @defstxclass[nat]{ Alias for @racket[exact-nonnegative-integer]. } @defstxclass[str]{ Alias for @racket[string]. } +@defstxclass[character]{ Alias for @racket[char]. } @defstxclass[(static [predicate (-> any/c any/c)] [description (or/c string? #f)])]{ diff --git a/racket/collects/syntax/parse/private/lib.rkt b/racket/collects/syntax/parse/private/lib.rkt index 275ebd7645..5eaa74c946 100644 --- a/racket/collects/syntax/parse/private/lib.rkt +++ b/racket/collects/syntax/parse/private/lib.rkt @@ -15,7 +15,7 @@ exact-integer exact-nonnegative-integer exact-positive-integer - + id nat char @@ -38,6 +38,8 @@ (define exact-integer-stx? (stxof exact-integer?)) (define exact-nonnegative-integer-stx? (stxof exact-nonnegative-integer?)) (define exact-positive-integer-stx? (stxof exact-positive-integer?)) +(define regexp-stx? (stxof regexp?)) +(define byte-regexp-stx? (stxof byte-regexp?)) ;; == Integrable syntax classes == @@ -59,10 +61,16 @@ (define-integrable-syntax-class -string (quote "string") string-stx?) (define-integrable-syntax-class -bytes (quote "bytes") bytes-stx?) +(define-integrable-syntax-class -regexp (quote "regexp") regexp-stx?) +(define-integrable-syntax-class -byte-regexp (quote "byte-regexp") byte-regexp-stx?) + +;; Overloading the meaning of existing identifiers (begin-for-syntax (set-box! alt-stxclass-mapping (list (cons #'string (syntax-local-value #'-string)) - (cons #'bytes (syntax-local-value #'-bytes))))) + (cons #'bytes (syntax-local-value #'-bytes)) + (cons #'regexp (syntax-local-value #'-regexp)) + (cons #'byte-regexp (syntax-local-value #'-byte-regexp))))) ;; Aliases (define-syntax id (make-rename-transformer #'identifier))