(if (and
(not (eof-object? (buf-lookahead! in 1)))
(char-numeric? (buf-lookahead! in 1)))
- (collect-char in dlang/integer? "")
+ (collect-char in dlang/integer?)
(abort "Expected an integer")))
(define (dlang/integer? in)
(define text
(string-append
(string (char-match in #\"))
- (collect-char in dlang/string-char? "")
+ (collect-char in dlang/string-char?)
(string (char-match in #\"))))
(token 'string text))
(token-text (dlang/id in)))))
(define (dlang/id in)
- (define str(collect-char in dlang/id-char? ""))
+ (define str(collect-char in dlang/id-char?))
(if (> (string-length str) 0)
(token 'id str)
(abort "An Id was expected but none found.")))
(buf-release! buf)
(not (null? result)))
-(define (collect-char in fn str)
- (if (fn in)
- (collect-char in fn (string-append str (string (buf-consume! in))))
- str))
+(define (collect-char in predfn)
+ (list->string (collect in predfn buf-consume!)))
-(define (consume-all in fn)
- (when (fn in)
+(define (consume-all in predfn)
+ (when (predfn in)
(buf-consume! in)
- (consume-all in fn)))
+ (consume-all in predfn)))
-(define (collect in fn rulefn lst)
+(define (collect in fn rulefn)
(if (fn in)
- (collect in fn rulefn (append lst (list (rulefn in))))
- lst))
+ (cons (rulefn in) (collect in fn rulefn))
+ '()))
+
;------------------------------------------------------------------------------
(define (dlang/program in)
- (collect in dlang/has-expression? dlang/expression '()))
+ (collect in dlang/has-expression? dlang/expression))
(define (dlang/has-expression? in)
(not (eof-object? (buf-lookahead! in 1))))
(define tree (syntree 'arglist "" '()))
(token-match in 'lpar)
(syntree-children-set! tree
- (collect in dlang/list-end? dlang/arg-list-item '()))
+ (collect in dlang/list-end? dlang/arg-list-item))
(token-match in 'rpar)
tree)
(define tree (syntree 'args "" '()))
(token-match in 'lpar)
(syntree-children-set! tree
- (collect in dlang/list-end? dlang/id-list-item '()))
+ (collect in dlang/list-end? dlang/id-list-item))
(token-match in 'rpar)
tree)
(collect
in
(lambda (buf) (not (token-matches? buf term)))
- dlang/expression
- '() )))
+ dlang/expression)))
; keyword-match
;------------------------------------------------------------------------------
+;(def-test "keyword-match should consume and return if next token matches"
+;(def-test "keyword-match should error if next token not an id"
+;(def-test "keyword-match should error if next token does not match"
; token->syntree
;------------------------------------------------------------------------------
; test-apply
;------------------------------------------------------------------------------
+;(def-test "test-apply should return true if the input matches the applied rule"
+;(def-test "test-apply should return false if the applied rule fails"
; collect-char
;------------------------------------------------------------------------------
+;(def-test "should return empty string if predicate function returns false"
+;(def-test "should return string containing chars from buffer when predicate returns true"
; consume-all
;------------------------------------------------------------------------------
+;(def-test "should consume nothing if predicate never returns true"
+;(def-test "should an item at a time until predicate returns false"
; collect
;------------------------------------------------------------------------------
-
+;(def-test "should return empty list if predicate never returns true"
+;(def-test "should return list of items for which predicate returned false"