summaryrefslogtreecommitdiff
path: root/quant.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'quant.lisp')
-rw-r--r--quant.lisp33
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)))