diff options
author | Juan Manuel Tomás <jtomas1815@gmail.com> | 2025-06-15 03:49:14 -0300 |
---|---|---|
committer | Juan Manuel Tomás <jtomas1815@gmail.com> | 2025-06-15 03:49:14 -0300 |
commit | 66b6d675055eb8a5017376eb6f43d609887d1289 (patch) | |
tree | 053802e3de74468bcc8f07e5e6e1628de2e9c4e4 /base.lisp | |
parent | da008e637b5bff56fed8dfbacc2adabc4bca18b1 (diff) | |
download | monparser-66b6d675055eb8a5017376eb6f43d609887d1289.tar.gz monparser-66b6d675055eb8a5017376eb6f43d609887d1289.zip |
Update parser interface
Diffstat (limited to 'base.lisp')
-rw-r--r-- | base.lisp | 25 |
1 files changed, 13 insertions, 12 deletions
@@ -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))))))) |