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:
parent
5b1ee3bef1
commit
ddb4364b1a
2 changed files with 41 additions and 10 deletions
|
@ -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*)))))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue