From 551f68815534321d7339e3d66f974a10387ac5d9 Mon Sep 17 00:00:00 2001 From: "Mike D. Lowis" Date: Wed, 18 Jul 2012 17:08:13 -0400 Subject: [PATCH] Added tests for core-form parsing function --- source/parser.scm | 29 +++++++++++++---------- tests/test_parser.scm | 53 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 69 insertions(+), 13 deletions(-) diff --git a/source/parser.scm b/source/parser.scm index 161b989..57e2405 100644 --- a/source/parser.scm +++ b/source/parser.scm @@ -47,18 +47,23 @@ (define (dlang/core-form in) (define tok (buf-lookahead! in 1)) - (cond (token-text tok) - (("def") (dlang/define in)) - (("set!") (dlang/assign in)) - (("if") (dlang/if in)) - (("begin") (dlang/begin in)) - (("func") (dlang/func in)))) - -(define (dlang/core-form? in) #f) - ;(define tok (buf-lookahead! in 1)) - ;(cond (token-text tok) - ; (("def" "set!" "if" "begin" "func") #t) - ; (else #f))) + (define text (if (eof-object? tok) "" (token-text tok))) + (cond + ((string=? text "def") (dlang/define in)) + ((string=? text "set!") (dlang/assign in)) + ((string=? text "if") (dlang/if in)) + ((string=? text "begin") (dlang/begin in)) + ((string=? text "func") (dlang/func in)) + (else (error "Expected a core form")))) + +(define (dlang/core-form? in) + (define tok (buf-lookahead! in 1)) + (define text (if (eof-object? tok) "" (token-text tok))) + (or (string=? text "def") + (string=? text "set!") + (string=? text "if") + (string=? text "begin") + (string=? text "func"))) (define (dlang/define in) (define node '()) diff --git a/tests/test_parser.scm b/tests/test_parser.scm index e85a8e3..a2ef1f6 100644 --- a/tests/test_parser.scm +++ b/tests/test_parser.scm @@ -15,6 +15,57 @@ ; dlang/core-form ;------------------------------------------------------------------------------ +(def-test "dlang/define should parse a variable definition" + (call-with-input-string "def foo 1.0;" + (lambda (input) + (define lxr (make-lexer input)) + (define result (dlang/core-form lxr)) + (syntree=? result + (syntree 'define "" + (list + (syntree 'id "foo" '()) + (syntree 'number "1.0" '()))))))) + +(def-test "dlang/core-form should parse a variable assignment" + (call-with-input-string "set! foo 1.0;" + (lambda (input) + (define lxr (make-lexer input)) + (define result (dlang/core-form lxr)) + (syntree=? result + (syntree 'assign "" + (list + (syntree 'id "foo" '()) + (syntree 'number "1.0" '()))))))) + +(def-test "dlang/core-form should parse an if statement" + (call-with-input-string "if cond result1;" + (lambda (input) + (define lxr (make-lexer input)) + (define result (dlang/core-form lxr)) + (syntree=? result + (syntree 'if "" + (list + (syntree 'id "cond" '()) + (syntree 'id "result1" '()))))))) + +(def-test "dlang/core-form should parse a begin block" + (call-with-input-string "begin;" + (lambda (input) + (define lxr (make-lexer input)) + (define result (dlang/core-form lxr)) + (syntree=? result + (syntree 'begin "" '()))))) + +(def-test "dlang/core-form should parse a func" + (call-with-input-string "func();" + (lambda (input) + (define lxr (make-lexer input)) + (define result (dlang/core-form lxr)) + (syntree=? result + (syntree 'func "" + (list + (syntree 'args "" '()) + (syntree 'block "" '()))))))) ; dlang/define ;------------------------------------------------------------------------------ @@ -31,7 +82,7 @@ ; dlang/assign ;------------------------------------------------------------------------------ -(def-test "dlang/assign should parse a variable definition" +(def-test "dlang/assign should parse a variable assignment" (call-with-input-string "set! foo 1.0;" (lambda (input) (define lxr (make-lexer input)) -- 2.52.0