diff options
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))) |