diff options
-rw-r--r-- | syntax-highlight/parsers.scm | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/syntax-highlight/parsers.scm b/syntax-highlight/parsers.scm index 31c17ae..5d08e45 100644 --- a/syntax-highlight/parsers.scm +++ b/syntax-highlight/parsers.scm @@ -38,6 +38,7 @@ parse-both parse-any parse-each + parse-maybe parse-many parse-string parse-char-set @@ -117,6 +118,16 @@ parser fails without consuming any input if any parser in PARSERS fails." (fold-right parse-both (parse-return '()) parsers)) +(define (parse-maybe parser) + "Create a parser that always succeeds, but tries to use PARSER. If +PARSER succeeds, its result is returned, otherwise the empty string is +returned without consuming any input." + (lambda (stream) + (let-values (((result remaining) (parser stream))) + (if result + (values result remaining) + (values "" stream))))) + (define (parse-many parser) "Create a parser that uses PARSER as many times as possible until it fails and return the results of each successful parse in a list. This |