&rest token-types)
"Discard tokens until we find one listed in TOKEN-TYPES.
+ Each of the TOKEN-TYPES is an expression which evaluates to either a
+ two-item list (TYPE VALUE), or a singleton TYPE; the latter is equivalent
+ to a list (TYPE t). Such a pair matches a token with the corresponding
+ TYPE and VALUE, except that a VALUE of `t' matches any token value.
+
If KEEP-END is true then retain the found token for later; otherwise
discard it. KEEP-END defaults to true if multiple TOKEN-TYPES are given;
otherwise false. If end-of-file is encountered then the indicator list is
(export 'error)
(defparse error (:context (context token-scanner-context)
(&key ignore-unconsumed force-progress)
- sub &optional (recover t))
+ sub &optional (recover t) &body body)
"Try to parse SUB; if it fails then report an error, and parse RECOVER.
This is the main way to recover from errors and continue parsing. Even
(parser () ,sub)
(parser () ,recover)
:ignore-unconsumed ,ignore-unconsumed
- :force-progress ,force-progress))
+ :force-progress ,force-progress
+ :action ,(and body `(lambda () ,@body))))
(export 'must)
(defparse must (:context (context token-scanner-context)