
Changed backtracking algorithm, runtime representations - syntax classes, ~describe no longer implicitly commit - ~describe no longer delimits effect of cut Added keyword & optional args for stxclasses Added ~do and #:do, ~post, ~commit and #:commit, ~delimit-cut and #:no-delimit-cut Added syntax/parse/debug, syntax/parse/experimental/* - expr/c for contracting macro sub-expressions moved from syntax/parse to syntax/parse/experimental/contract - syntax class reflection (~reflect, ~splicing-reflect) - eh-alternative-sets (~eh-var) - provide-syntax-class/contract (only for params, not attrs so far) Changed ~fail to not include POST progress (#:fail still does) old (~fail _) is now (~post (~fail _)) Made msg argument of ~fail optional Removed generic "repetition constraint violated" msg Removed atom-in-list stxclass Removed unnecessary datum->syntax on cdr of pair pattern massive improvements to long-list microbenchmarks Optimization: integrable syntax classes (id, expr, keyword) need better measurements Optimization: ad hoc elimination of head/tail choice point for (EH ... . ()) patterns Added unstable/wrapc (proc version of expr/c)
76 lines
2.3 KiB
Racket
76 lines
2.3 KiB
Racket
#lang scribble/doc
|
|
@(require scribble/manual
|
|
scribble/struct
|
|
scribble/decode
|
|
scribble/eval
|
|
"parse-common.rkt"
|
|
(for-label syntax/kerncase))
|
|
|
|
@title[#:tag "stxparse-lib"]{Library syntax classes and literal sets}
|
|
|
|
@section{Syntax classes}
|
|
|
|
@(begin
|
|
(define-syntax-rule (defstxclass name . pre-flows)
|
|
(defidform name . pre-flows))
|
|
(define-syntax-rule (defstxclass* (name arg ...) . pre-flows)
|
|
(defform (name arg ...) . pre-flows)))
|
|
|
|
@defstxclass[expr]{
|
|
|
|
Matches anything except a keyword literal (to distinguish expressions
|
|
from the start of a keyword argument sequence). The term is not
|
|
otherwise inspected, since it is not feasible to check if it is
|
|
actually a valid expression.
|
|
}
|
|
|
|
@deftogether[(
|
|
@defstxclass[identifier]
|
|
@defstxclass[boolean]
|
|
@defstxclass[str]
|
|
@defstxclass[char]
|
|
@defstxclass[keyword]
|
|
@defstxclass[number]
|
|
@defstxclass[integer]
|
|
@defstxclass[exact-integer]
|
|
@defstxclass[exact-nonnegative-integer]
|
|
@defstxclass[exact-positive-integer])]{
|
|
|
|
Match syntax satisfying the corresponding predicates.
|
|
}
|
|
|
|
@defstxclass[id]{ Alias for @scheme[identifier]. }
|
|
@defstxclass[nat]{ Alias for @scheme[exact-nonnegative-integer]. }
|
|
|
|
@defproc[(static [predicate (-> any/c any/c)]
|
|
[description (or/c string? #f)])
|
|
(attributes value)]{
|
|
|
|
The @defidentifier[#'static #:form? #t] syntax class matches an
|
|
identifier that is bound in the syntactic environment to static
|
|
information (see @scheme[syntax-local-value]) satisfying the given
|
|
@scheme[predicate]. If the term does not match, the
|
|
@scheme[description] argument is used to describe the expected syntax.
|
|
|
|
When used outside of the dynamic extent of a macro transformer (see
|
|
@scheme[syntax-transforming?]), matching fails.
|
|
|
|
The attribute @var[value] contains the value the name is bound to.
|
|
}
|
|
|
|
|
|
@section{Literal sets}
|
|
|
|
@defidform[kernel-literals]{
|
|
|
|
Literal set containing the identifiers for fully-expanded code
|
|
(@secref[#:doc '(lib "scribblings/reference/reference.scrbl")
|
|
"fully-expanded"]). The set contains all of the forms listed by
|
|
@scheme[kernel-form-identifier-list], plus @scheme[module],
|
|
@scheme[#%plain-module-begin], @scheme[#%require], and
|
|
@scheme[#%provide].
|
|
|
|
Note that the literal-set uses the names @scheme[#%plain-lambda] and
|
|
@scheme[#%plain-app], not @scheme[lambda] and @scheme[#%app].
|
|
}
|