(:char "<character-literal>")
(:eof "<end-of-file>")
(:ellipsis "`...'")
+ (:shl "`<<'")
+ (:shr "`>>'")
+ (:eq "`=='")
+ (:ne "`!='")
+ (:le "`<='")
+ (:ge "`>='")
+ (:and "`&&'")
+ (:or "`||'")
(t (format nil "<? ~S~@[ ~S~]>" type value)))))
(show-expected (thing)
(acond ((gethash thing *indicator-map*) it)
(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)