              (?\\ (cons 'char (geiser-syntax--read/elisp)))
              (?\( (geiser-syntax--read/token 'vectorb))
              (?\< (geiser-syntax--read/unprintable))
+             ((?' ?` ?,) (char-before) (geiser-syntax--read/next-token))
              (t (let ((tok (geiser-syntax--read/elisp)))
                   (if tok (cons 'atom (intern (format "#%s" tok)))
                     (geiser-syntax--read/next-token))))))

    (if (memq (car token) tks) token
      (error "Unexpected token: %s" token))))

(defsubst geiser-syntax--read/try (&rest tks)
  (let ((p (point))
        (tk (ignore-errors (apply 'geiser-syntax--read/match tks))))

(defun geiser-syntax--read/list ()
  (cond ((geiser-syntax--read/try 'dot)
         (let ((tail (geiser-syntax--read)))
           (geiser-syntax--read/skip-until 'eob 'rparen)
           tail))
        ((geiser-syntax--read/try 'rparen 'eob) nil)
        (t (cons (geiser-syntax--read)
