source: project/release/5/silex/tags/1.0/tests/run.scm @ 35594

Last change on this file since 35594 was 35594, checked in by felix winkelmann, 3 years ago

silex 1.0

File size: 3.0 KB
Line 
1
2;; SIlex unit test
3
4
5(import (chicken process) srfi-13 silex test)
6
7(define make-tok
8  (lambda (tok-type lexeme line . attr)
9    (cond ((null? attr)
10           (vector tok-type line lexeme))
11          ((null? (cdr attr))
12           (vector tok-type line lexeme (car attr)))
13          (else
14           (vector tok-type line lexeme (car attr) (cadr attr))))))
15
16
17(define parse-spec-char
18  (lambda (lexeme line)
19    (make-tok char-tok lexeme line newline-ch)))
20
21(define parse-digits-char
22  (lambda (lexeme line)
23    (let* ((num (substring lexeme 1 (string-length lexeme)))
24           (n (string->number num)))
25      (make-tok char-tok lexeme line n))))
26
27(define parse-quoted-char
28  (lambda (lexeme line)
29    (let ((c (string-ref lexeme 1)))
30      (make-tok char-tok lexeme line (char->integer c)))))
31
32(define parse-ordinary-char
33  (lambda (lexeme line)
34    (let ((c (string-ref lexeme 0)))
35      (make-tok char-tok lexeme line (char->integer c)))))
36
37(define extract-id
38  (lambda (s)
39    (let ((len (string-length s)))
40      (substring s 1 (- len 1)))))
41
42(define parse-id
43  (lambda (lexeme line)
44    (make-tok id-tok lexeme line (string-downcase lexeme) lexeme)))
45
46(define parse-id-ref
47  (lambda (lexeme line)
48    (let* ((orig-name (extract-id lexeme))
49           (name (string-downcase orig-name)))
50    (make-tok subst-tok lexeme line name orig-name))))
51
52(define parse-power-m
53  (lambda (lexeme line)
54    (let* ((len (string-length lexeme))
55           (substr (substring lexeme 1 (- len 1)))
56           (m (string->number substr))
57           (range (cons m m)))
58      (make-tok power-tok lexeme line range))))
59
60(define parse-power-m-inf
61  (lambda (lexeme line)
62    (let* ((len (string-length lexeme))
63           (substr (substring lexeme 1 (- len 2)))
64           (m (string->number substr))
65           (range (cons m 'inf)))
66      (make-tok power-tok lexeme line range))))
67
68(define parse-power-m-n
69  (lambda (lexeme line)
70    (let ((len (string-length lexeme)))
71      (let loop ((comma 2))
72        (if (char=? (string-ref lexeme comma) #\,)
73            (let* ((sub1 (substring lexeme 1 comma))
74                   (sub2 (substring lexeme (+ comma 1) (- len 1)))
75                   (m (string->number sub1))
76                   (n (string->number sub2))
77                   (range (cons m n)))
78              (make-tok power-tok lexeme line range))
79            (loop (+ comma 1)))))))
80
81(system* "csi -n -R silex -e '(lex \"regexp.l\" \"regexp.l.scm\" (quote counters) (quote line))'")
82
83
84(load "regexp.l.scm")
85
86
87(define lexer-error error)
88
89
90(define (run-lexer s)
91  (if (string? s)
92      (begin (lexer-init 'string s)
93             (let recur ((ax '()))
94               (let ((c (lexer)))
95                 (if (equal? eof-tok (vector-ref c 0)) (reverse ax) (recur (cons (vector-ref c 2) ax))))))
96      (else (error 'run-lexer "bad argument type; not a string" s)) ))
97
98
99(test "numeric regexp lexer test"
100      `("-"
101        "?"
102        "("
103        "("
104        "{decimal}"
105        "+"
106        "\\."
107        "("
108        "{decimal}"
109        "+"
110        ")"
111        "?"
112        ")"
113        "|"
114        "("
115        "\\."
116        "{decimal}"
117        "+"
118        ")"
119        ")"
120        "("
121        "["
122        "e"
123        "E"
124        "]"
125        "("
126        "[-"
127        "+"
128        "]"
129        ")"
130        "?"
131        "{decimal}"
132        "+"
133        ")"
134        "?")
135     
136      (run-lexer "-?(({decimal}+\\.({decimal}+)?)|(\\.{decimal}+))([eE]([-+])?{decimal}+)?"))
137
138(test-exit)
139)
Note: See TracBrowser for help on using the repository browser.