X-Git-Url: https://git.distorted.org.uk/~mdw/sod/blobdiff_plain/2b8759bf0239b0a98ac830952ed69572580826c1..6c3c2dd3e236da72ce43b923e4eeac7d33eb5cbd:/src/parser/parser-proto.lisp diff --git a/src/parser/parser-proto.lisp b/src/parser/parser-proto.lisp index 189e503..ed439f9 100644 --- a/src/parser/parser-proto.lisp +++ b/src/parser/parser-proto.lisp @@ -87,6 +87,21 @@ failures :initial-value nil)) +(export 'parse-empty) +(defun parse-empty (&optional value) + "Return a parser which parses nothing, successfully. + + The parser returns VALUE and consumes nothing." + (lambda () (values value t nil))) + +(export 'parse-fail) +(defun parse-fail (indicator &optional consumedp) + "Return a parser which fails. + + The parser reports the INDICATOR and (falsely) claims to have consumed + input if CONSUMEDP is true." + (lambda () (values indicator nil consumedp))) + ;;;-------------------------------------------------------------------------- ;;; Basic protocol. @@ -591,7 +606,7 @@ The return value may later be used with `parser-restore-place'. Be careful: all of this is happening at macro-expansion time.") (:method (context) - (error "Parser context ~S doesn't support rewinding." context))) + (error "Parser context ~S doesn't support rewinding" context))) (export 'parser-restore-place) (defgeneric parser-restore-place (context place) @@ -668,7 +683,7 @@ (defun commit-peeked-place () "Called by `commit' not lexically within `peek'." - (error "`commit' is not within `peek'.")) + (error "`commit' is not within `peek'")) (export 'commit) (defparse commit ()