summaryrefslogtreecommitdiff
path: root/base.lisp
diff options
context:
space:
mode:
authorJuan Manuel Tomás <jtomas1815@gmail.com>2025-06-15 03:49:14 -0300
committerJuan Manuel Tomás <jtomas1815@gmail.com>2025-06-15 03:49:14 -0300
commit66b6d675055eb8a5017376eb6f43d609887d1289 (patch)
tree053802e3de74468bcc8f07e5e6e1628de2e9c4e4 /base.lisp
parentda008e637b5bff56fed8dfbacc2adabc4bca18b1 (diff)
downloadmonparser-66b6d675055eb8a5017376eb6f43d609887d1289.tar.gz
monparser-66b6d675055eb8a5017376eb6f43d609887d1289.zip
Update parser interface
Diffstat (limited to 'base.lisp')
-rw-r--r--base.lisp25
1 files changed, 13 insertions, 12 deletions
diff --git a/base.lisp b/base.lisp
index 61c47bc..6887f0a 100644
--- a/base.lisp
+++ b/base.lisp
@@ -6,25 +6,26 @@
(defstruct failure
place
- message)
+ (message "")
+ (priority 0))
+
+(defmethod print-object ((obj failure) stream)
+ (if (failure-place obj)
+ (multiple-value-bind (line column) (line-and-column (failure-place obj))
+ (format stream "~a:~a: ~a~&~a~&"
+ line column (failure-message obj) (failure-place obj)))
+ (format stream "~a~&" (failure-message obj))))
(defun new (tree)
- (lambda (input &key lazy)
- (declare (ignore lazy))
+ (lambda (input)
(make-parsing :tree tree :left input)))
(defun bind (parser f)
- (lambda (input &key lazy)
+ (lambda (input)
(let ((r (funcall parser input)))
(cond ((parsing-p r)
- (if lazy
- (lambda (ignored-input &key lazy)
- (declare (ignore ignored-input))
- (funcall (funcall f (parsing-tree r) input)
- (parsing-left r)
- :lazy lazy))
- (funcall (funcall f (parsing-tree r) input)
- (parsing-left r))))
+ (funcall (funcall f (parsing-tree r) input)
+ (parsing-left r)))
((failure-p r)
r)
(t (error (format nil "Invalid return value: ~a" r)))))))