Attempts to match the next input character with one of the supplied matchers.
(defmacro match (&rest matchers)
"Attempts to match the next input character with one of the supplied matchers."
`(let ((c (peek-stream (state-stream s))))
(and
(or ,@(loop for m in matchers
collect (etypecase m
(standard-char `(char= ,m c))
(symbol `(,m c)))))
;; cheat here a little bit - eat entire char entity instead
;; of peeked char
(read-stream (state-stream s)))))Source Context