70 lines
2.2 KiB
Racket
70 lines
2.2 KiB
Racket
#lang scribble/doc
|
|
@(require "common.rkt"
|
|
(for-label mzlib/awk
|
|
scheme/contract))
|
|
|
|
@mzlib[#:mode title awk]
|
|
|
|
@defform/subs[
|
|
#:literals (after range / => :range range: :range: else)
|
|
(awk next-record-expr
|
|
(record field-id ...)
|
|
maybe-counter
|
|
((state-variable init-expr) ...)
|
|
maybe-continue
|
|
clause ...)
|
|
([maybe-counter code:blank
|
|
id]
|
|
[maybe-continue code:blank
|
|
id]
|
|
[clause (test body ...+)
|
|
(test => procedure-expr)
|
|
(/ regexp-str / (id-or-false ...+) body ...+)
|
|
(range excl-start-test excl-stop-test body ...+)
|
|
(:range incl-start-test excl-stop-test body ...+)
|
|
(range: excl-start-test incl-stop-test body ...+)
|
|
(:range: incl-start-test incl-stop-test body ...+)
|
|
(else body ...+)
|
|
(after body ...+)]
|
|
[test integer
|
|
regexp-string
|
|
expr]
|
|
[excl-start-test test]
|
|
[excl-stop-test test]
|
|
[incl-start-test test]
|
|
[incl-stop-test test]
|
|
[id-or-false id
|
|
#f])]{
|
|
|
|
The @racket[awk] macro from Scsh @cite["Shivers06"]. In addition to
|
|
@racket[awk], the Scsh-compatible procedures @racket[match:start],
|
|
@racket[match:end], @racket[match:substring], and @racket[regexp-exec]
|
|
are defined. These @racketidfont{match:} procedures must be used to
|
|
extract match information in a regular expression clause when using
|
|
the @racket[=>] form. }
|
|
|
|
@deftogether[(
|
|
@defproc[(match:start [rec ....]
|
|
[which exact-nonnegative-integer? 0])
|
|
exact-nonnegative-integer?]
|
|
@defproc[(match:end [rec ....]
|
|
[which exact-nonnegative-integer? 0])
|
|
exact-nonnegative-integer?]
|
|
@defproc[(match:substring
|
|
[rec ....]
|
|
[which exact-nonnegative-integer? 0])
|
|
string?]
|
|
)]{
|
|
|
|
Extracts a start position, end position, or substring corresponding to
|
|
a match. The first argument is the value supplied to the procedure
|
|
after @racket[=>] in a @racket[awk] clause or the result of
|
|
@racket[regexp-exec].}
|
|
|
|
|
|
@defproc[(regexp-exec [re (or/c string? regexp?)] [s string?])
|
|
(or/c .... false/c)]{
|
|
|
|
Matches a regexp to a string, returning a record compatible with
|
|
@racket[match:start], etc.}
|