みなさんありがとうございます。
cl-lexを使うパターンと使わないパターンの二つを書いてみました。

>>875-876
たしかにご指摘のとおりloopの部分がおかしかったです。
そしてまさに>>876の例が行いたかった処理です。うまく動きました。
ただ、コメントにあるように効率的に処理するために一度に複数のトークンを切り出すのが理想的ですが
peek-charを使っても一つ先しか見れません
http://paste.lisp.org/display/127703
このようにして先の文字を読み込むのではなく、はじめにpeek-charを使うと今度は": "の読み込みで
引っかかってしまいます。

>>877
正規表現を書き直したら大方うまく動きました。行も判定できました。
ですが、backslashの判定と、パースの結果をまとめる部分がうまくいきません。
cl-lexを使ってこのように書きました。
http://paste.lisp.org/display/127704
引き続き調べます。