X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/e0808c472145fc81e52898bc9ac289e10c4f4f41..4fd69126f8b52945e0a572d1cf4a347468c1ced5:/src/lexer-proto.lisp diff --git a/src/lexer-proto.lisp b/src/lexer-proto.lisp index 7ed7924..d6d33cb 100644 --- a/src/lexer-proto.lisp +++ b/src/lexer-proto.lisp @@ -116,7 +116,8 @@ (export 'error) (defparse error (:context (context token-scanner-context) - (&key) sub &optional (recover t)) + (&key ignore-unconsumed) + sub &optional (recover t)) "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 @@ -126,10 +127,15 @@ were never here. Otherwise, try to recover in a sensible way so we can continue parsing. The details of this recovery are subject to change, but the final action is generally to invoke the RECOVER parser and return its - result." + result. + + If IGNORE-UNCONSUMED evaluates non-nil, then just propagate a failure of + SUB if it didn't consume input. (This makes it suitable for use where the + parser containing `error' might be optional.)" `(parse-error-recover ,(parser-scanner context) (parser () ,sub) - (parser () ,recover))) + (parser () ,recover) + :ignore-unconsumed ,ignore-unconsumed)) ;;;-------------------------------------------------------------------------- ;;; Lexical analysis utilities.