source: project/release/3/lexgen/trunk/tests/run.scm @ 13244

Last change on this file since 13244 was 13244, checked in by Ivan Raikov, 12 years ago

Initial code for lexgen, a lexer combinator library.

File size: 1.5 KB
Line 
1
2(require-extension srfi-1)
3
4(load "../lexgen.scm")
5
6(require-extension test)
7
8
9(define a-pat (pred #\a char=?))
10(define b-pat (pred #\b char=?))
11(define a-then-b-pat (seq (list a-pat b-pat)))
12(define a-or-b-pat (seq (list a-pat b-pat)))
13(define a-star-pat (star a-pat))
14 
15(define abc-stream (list `(() ,(string->list "abc"))))
16
17(print (a-pat abc-stream))
18
19(test-group "lexgen test"
20            (test (sprintf "match [a] on ~S" "abc") 
21                   `(((#\a) (#\b #\c))) (a-pat abc-stream))
22            (test (sprintf "match [b] on ~S" "abc") 
23                   `() (b-pat abc-stream))
24            (test (sprintf "match ab on ~S" "abc") 
25                   `(((#\b #\a ) ( #\c))) (a-then-b-pat abc-stream))
26            (test (sprintf "match a|b on ~S" "abc") 
27                   `(((#\b #\a ) ( #\c))) (a-or-b-pat abc-stream))
28            (test (sprintf "match a* on ~S" "abc") 
29                   `((() (#\a #\b #\c)) ((#\a) (#\b #\c))) (a-star-pat abc-stream))
30            )
31
32
33;; A pattern to match floating point numbers.
34;; "-"?(([0-9]+(\\.[0-9]+)?)|(\\.[0-9]+))([eE][+-]?[0-9]+)?
35
36(define numpat
37  (let* ((digit        (range #\0 #\9))
38         (digits       (pos digit))
39         (fraction     (seq `(,(char #\.) ,digits)))
40         (significand  (bar `(,(seq `(,digits ,(opt fraction))) ,fraction)))
41         (exp          (seq `(,(set "eE") ,(opt (set "+-")) ,digits)))
42         (sign         (opt (char #\-)) ))     
43    (seq `(,sign ,(seq `(,significand ,(opt exp)))))))
44
45(test-group "lexgen lex test"
46            (test (sprintf "match numpat on ~S" "3.45e-6")
47                   `((#\3 #\. #\4 #\5 #\e #\- #\6) ()) (lex numpat "3.45e-6"))
48            (test (sprintf "match numpat on ~S" "hi there")
49                  #f (lex numpat "hi there")))
Note: See TracBrowser for help on using the repository browser.