anchor.diff:      :comma :dot :minus :plus :star :slash :semicolon
   
       ;; One or two character tokens
  -    :bang :bang-equal
  -    :equal :equal-equal
  -    :greater :greater-equal
  -    :less :less-equal
  -
  -    ;; Literals
  -    :identifier :string :number
  -
  -    ;; Keywords.
  +                :bang :bang-equal
  +                :equal :equal-equal
  +                :greater :greater-equal
  +                :less :less-equal
  +
  +                ;; Literals
  +                :identifier :string :number
  +
  +                ;; Keywords.
       :and :class :else :false :fun :for :if :nil :or
  -    :print :return :super :this :true :var :while
  +                :print :return :super :this :true :var :while
   
       :eof))
   
  
positive.code: (defun scan-tokens (input)
    "Scan tokens from input. Return vector of scanned tokens."
    (loop with scanner = (make-instance 'scanner :source input)
       until (is-at-end scanner) do
         (move-start-to-current scanner)
         (scan-token scanner)
       finally
         (return (progn
                   (move-start-to-current scanner)
                   (add-token scanner :eof)
                   (tokens scanner)))))
  
  (-> add-token (scanner token-type &optional t) null)
  (defun add-token (scanner token-type &optional literal)
  
negative.code:     `(case (progn
               ,@input)
         ,@(loop for (char token-type) in tokens
                 collect `(,char
                           (add-token ,scanner ,token-type)))
         (otherwise (cerror "Continue scanning."
                            'unexpected-character-error
                            :line (line ,scanner)
  