chiark / gitweb /
src/method-proto.lisp: Use new `definst' private-slot-name feature.
[sod] / src / parser / parser-proto.lisp
index 189e503fb40fee0a6d6e726f8d4f9573c31fd30c..ed439f962fc3349bf41b80bb1f1d795f1abbe98c 100644 (file)
@@ -87,6 +87,21 @@ (defun combine-parser-failures (failures)
          failures
          :initial-value nil))
 
          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.
 
 ;;;--------------------------------------------------------------------------
 ;;; Basic protocol.
 
@@ -591,7 +606,7 @@   (defgeneric parser-capture-place (context)
    The return value may later be used with `parser-restore-place'.  Be
    careful: all of this is happening at macro-expansion time.")
     (:method (context)
    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)
 
   (export 'parser-restore-place)
   (defgeneric parser-restore-place (context place)
@@ -668,7 +683,7 @@ (defparse peek (:context (context t) parser)
 
 (defun commit-peeked-place ()
   "Called by `commit' not lexically within `peek'."
 
 (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 ()
 
 (export 'commit)
 (defparse commit ()