From 69cb7aee1220e23ae7e1b2171b229c82f6a9c591 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Mon, 10 Aug 2015 15:47:33 -0400 Subject: Add parse-up-to. --- parser-combinators.scm | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'parser-combinators.scm') diff --git a/parser-combinators.scm b/parser-combinators.scm index 4a3a3f8..e0522dd 100644 --- a/parser-combinators.scm +++ b/parser-combinators.scm @@ -46,6 +46,7 @@ parse-each parse-zero-or-more parse-one-or-more + parse-up-to parse-maybe parse)) @@ -158,6 +159,18 @@ parsers succeed." (($ value stream) (loop stream (cons value result))))))) +(define (parse-up-to n parser) + "Parse using PARSER at most N times." + (lambda (stream) + (let loop ((stream stream) + (m 0)) + (if (= m n) + '() + (match (parser stream) + ((? parse-failure?) '()) + (($ value stream) + (cons value (loop stream (1+ m))))))))) + (define* (parse-maybe parser #:optional (default #f)) (lambda (stream) (match (parser stream) -- cgit v1.2.3