Changeset 28037 in project for release/4/honu/trunk/honu.scm
- Timestamp:
- 01/05/13 22:12:13 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
release/4/honu/trunk/honu.scm
r25847 r28037 9 9 10 10 (define-constant +operator-chars+ 11 '(#\- #\+ #\/ #\? #\: #\* #\% #\& #\! #\. #\~ #\_ #\| #\> #\< #\= #\^ #\\ #\@) ) 12 13 (define (read-honu #!optional (port (current-input-port)) line-numbers lnwrap) 11 '(#\- #\+ #\/ #\? #\: #\* #\% #\& #\! #\. #\~ #\_ #\| #\> #\< #\= #\^) ) 12 13 ;; variant to keep old signature working 14 (define (read-honu . args) 15 (apply 16 (if (and (pair? args) (keyword? (car args))) 17 read-honu-expression 18 (lambda (#!optional (port (current-input-port)) ln lnw (flv 'vanilla-flavor)) 19 (read-honu-expression port: port line-numbers: ln lnwrap: lnw flavor: flv))) 20 args)) 21 22 (define (read-honu-expression #!key (port (current-input-port)) 23 line-numbers 24 lnwrap 25 (flavor 'vanilla-flavor)) 14 26 (let ((ln (nth-value 0 (port-position port)))) 15 27 (define (lnw x) … … 19 31 error 'read-honu 20 32 (string-append msg (if line-numbers (conc " in line " ln) "")) args) ) 21 (define (opchar? c) (memq c +operator-chars+)) 33 (define opchar? 34 (case flavor 35 ((prolog-flavor) 36 (lambda (c) 37 (or (memq c +operator-chars+) 38 (memq c '(#\@ #\\))))) 39 (else (cut memq <> +operator-chars+)))) 22 40 (define (skip) 23 41 (let ((c (peek-char port))) … … 30 48 (read-char port) 31 49 (skip) ) 32 ((char=? #\/ c) 50 ((and (char=? #\% c) 51 (eq? flavor 'prolog-flavor)) 52 (skip-line)) 53 ((and (char=? #\/ c) 54 (not (eq? flavor 'prolog-flavor))) 33 55 (read-char port) 34 56 (let ((c (peek-char port))) 35 57 (case c 36 ((#\/) 37 (read-line port) 38 (set! ln (fx+ ln 1)) 39 (skip) ) 58 ((#\/) (skip-line)) 40 59 ((#\*) (skip-comment) (skip)) 41 60 (else … … 45 64 (lnw '/) ) ) ) ) ) 46 65 (else #f) ) ) ) 66 (define (skip-line) 67 (read-line port) 68 (set! ln (fx+ ln 1)) 69 (skip)) 47 70 (define (scan) 48 71 (or (skip) … … 66 89 ((string=? "sx" t) (read port)) 67 90 (else (err "invalid escape syntax" (conc "#" t))) ) ) ) ) ) ) 68 ((#\') 91 ((#\') 69 92 (read-char port) 70 93 (let ((s (read-escaped (lambda (c) (char=? #\' c))))) 71 (if (zero? (string-length s)) 72 (err "empty character literal") 73 (lnw (string-ref s 0) ) ) ) ) 94 (case flavor 95 ((prolog-flavor) (lnw (string->symbol s))) 96 ((javascript-flavor) (lnw s)) 97 (else 98 (if (zero? (string-length s)) 99 (err "empty character literal") 100 (lnw (string-ref s 0) ) ) ) ) ) ) 74 101 ((#\,) (read-char port) (lnw '|,|)) 75 102 ((#\;) (read-char port) (lnw '|;|))
Note: See TracChangeset
for help on using the changeset viewer.