(define (dlang/expression in)
(if (core-form? in)
(core-form in)
- (let ((result (dlang/basic-expr in))
- (ret '()))
+ (let ((result (dlang/basic-expr in)))
(if (equal? 'lpar (buf-lookahead! in 1))
(begin
(match in 'lpar)
- (set! ret (dlang/expr-list in))
+ (set! result
+ (syntree 'apply (list result (dlang/expr-list in))))
(match in 'rpar)))
- ret)))
+ result)))
(define (dlang/core-form in)
(define tok (buf-lookahead! in 1))
(token-match in 'lpar)
(if (not (token-matches? in 'rpar))
(begin
- (set! chldrn (append chldrn (list (token->syntree (token-match in 'id)))))
+ (set! chldrn
+ (append chldrn (list (token->syntree (token-match in 'id)))))
(while (not (token-matches? in 'rpar))
(token-match in 'comma)
- (set! chldrn (append chldrn (list (token->syntree (token-match in 'id))))))))
+ (set! chldrn
+ (append chldrn (list (token->syntree (token-match in 'id))))))))
(token-match in 'rpar)
(syntree-children-set! tree chldrn)
tree)
; dlang/expression
;------------------------------------------------------------------------------
+(def-test "dlang/expression should parse a literal"
+ (call-with-input-string "abc"
+ (lambda (input)
+ (define lxr (make-lexer input))
+ (define result (dlang/expression lxr))
+ (and (syntree? result)
+ (equal? 'id (syntree-type result))
+ (equal? "abc" (syntree-text result))
+ (equal? '() (syntree-children result))))))
; dlang/core-form
;------------------------------------------------------------------------------
; dlang/basic-expr
;------------------------------------------------------------------------------
+(def-test "dlang/basic-expr should parse a literal"
+ (call-with-input-string "abc"
+ (lambda (input)
+ (define lxr (make-lexer input))
+ (define result (dlang/basic-expr lxr))
+ (and (syntree? result)
+ (equal? 'id (syntree-type result))
+ (equal? "abc" (syntree-text result))
+ (equal? '() (syntree-children result))))))
; dlang/operator-app
;------------------------------------------------------------------------------