diff options
author | Juan Manuel Tomás <jtomas1815@gmail.com> | 2025-06-23 02:22:51 -0300 |
---|---|---|
committer | Juan Manuel Tomás <jtomas1815@gmail.com> | 2025-06-23 02:22:51 -0300 |
commit | 1c1162747d8d7e12140329a105c0776d5555a351 (patch) | |
tree | 5feaaa2b9ac357732c9d2a9c922cfaa9356dd76c /quant.lisp | |
parent | 4d355a842737f7938d148c53338ce6f3fa055628 (diff) | |
download | monparser-main.tar.gz monparser-main.zip |
Diffstat (limited to 'quant.lisp')
-rw-r--r-- | quant.lisp | 33 |
1 files changed, 0 insertions, 33 deletions
diff --git a/quant.lisp b/quant.lisp deleted file mode 100644 index bdd0cfc..0000000 --- a/quant.lisp +++ /dev/null @@ -1,33 +0,0 @@ -(in-package #:monparser) - -(defparameter nothing - (new nil)) - -(defun optional (p) - (one-of p nothing)) - -(defun many (p &key all) - (lambda (input) - (let* ((result '()) - (last-failure - (do ((r (funcall p input) (funcall p input))) ((failure-p r) r) - (when (parsing-p r) - (setf input (parsing-left r)) - (when (parsing-tree r) - (push (parsing-tree r) result)))))) - (if (or (not result) - (and result all (has-data? (failure-place last-failure)))) - (make-failure :place input :message (failure-message last-failure)) - (make-parsing :tree (reverse result) :left input))))) - -; TODO: Need to be redone in a non-recursive way -(defun repeat (p min &optional (max 0)) - (if (> min 0) - (comp ((x p) - (xs (repeat p (1- min) (1- max)))) - (cons x xs)) - (if (> max 0) - (comp ((x (optional p)) - (xs (repeat p 0 (if x (1- max) 0)))) - (if x (cons x xs) x)) - nothing))) |