27 lines
577 B
Plaintext
27 lines
577 B
Plaintext
(de readSexpr ()
|
|
(case (skip)
|
|
("(" (char) (readList))
|
|
("\"" (char) (readString))
|
|
(T (readAtom)) ) ) )
|
|
|
|
(de readList ()
|
|
(make
|
|
(loop
|
|
(NIL (skip))
|
|
(T (= @ ")") (char))
|
|
(link (readSexpr)) ) ) )
|
|
|
|
(de readString ()
|
|
(pack
|
|
(make
|
|
(until (= "\"" (or (peek) (quit "Unterminated string")))
|
|
(link (char)) )
|
|
(char) ) ) )
|
|
|
|
(de readAtom ()
|
|
(let X
|
|
(make
|
|
(until (or (sp? (peek)) (member (peek) '("(" ")")))
|
|
(link (char)) ) )
|
|
(or (format X) (intern (pack X))) ) )
|