1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-17 01:00:20 +02:00

get-lexer/1 for elisp that finishes after the first full expression is read.

* module/language/elisp/lexer.scm: Add get-lexer/1.
* test-suite/tests/elisp-reader.test: Test lexer/1.
This commit is contained in:
Daniel Kraft 2009-08-26 21:03:06 +02:00
parent 5b1ee3bef1
commit ddb4364b1a
2 changed files with 41 additions and 10 deletions

View file

@ -31,13 +31,15 @@
(define (get-string-lexer str)
(call-with-input-string str get-lexer))
(define (lex-all lexer)
(let iterate ((result '()))
(let ((token (lexer)))
(if (eq? token '*eoi*)
(reverse result)
(iterate (cons token result))))))
(define (lex-string str)
(let ((lexer (get-string-lexer str)))
(let iterate ((result '()))
(let ((token (lexer)))
(if (eq? token '*eoi*)
(reverse result)
(iterate (cons token result)))))))
(lex-all (get-string-lexer str)))
(with-test-prefix "Lexer"
@ -113,4 +115,12 @@ test\"ab\"\\ abcd
`(,(+ (expt 2 26) (char->integer #\[))
,(+ (expt 2 27) (expt 2 25) (char->integer #\Z))
,(- (char->integer #\X) (char->integer #\@))
,(+ (expt 2 22) (expt 2 23) (expt 2 24) 32)))))
,(+ (expt 2 22) (expt 2 23) (expt 2 24) 32))))
(let* ((lex1-string "((1 2) [2 [3]] 5)")
(lexer (call-with-input-string (string-append lex1-string " 1 2")
get-lexer/1)))
(pass-if "lexer/1"
(and (equal? (lex-all lexer) (lex-string lex1-string))
(eq? (lexer) '*eoi*)
(eq? (lexer) '*eoi*)))))