anchor.diff:  (deftoken :true         "true"   :keyword)
   (deftoken :try          "try"    :keyword)
   (deftoken :typeof       "typeof" :keyword)
  +(deftoken :undefined    "undefined" :keyword) ;???
   (deftoken :var          "var"    :keyword)
   (deftoken :void         "void"   :keyword) ;???
   (deftoken :while        "while"  :keyword)
  
positive.code: ;;; because the order that the tokens appear in this list is significant.
  (defparameter *operator-tokens* nil)
  
  ;;; These are keyword tokens ???
  (defparameter *keyword-tokens* nil)
  
  ;; end of input
  (deftoken :eoi)
  
  ;; Compound assignment operators
  (deftoken :times-equals   "*=" :operator)
  (deftoken :divide-equals  "/=" :operator)
  (deftoken :mod-equals     "%=" :operator)
  (deftoken :plus-equals    "+=" :operator)
  (deftoken :minus-equals   "-=" :operator)
  (deftoken :lshift-equals  "<<=" :operator)
  (deftoken :rshift-equals  ">>=" :operator)
  (deftoken :urshift-equals ">>>=" :operator)
  (deftoken :and-equals     "&=" :operator)
  (deftoken :xor-equals     "^=" :operator)
  (deftoken :or-equals      "|=" :operator)
  
  ;; Operators and punctuators
  (deftoken :newline      (format nil "~%"))
  (deftoken :semicolon    ";" :operator)
  (deftoken :comma        "," :operator)
  (deftoken :hook         "?" :operator)
  (deftoken :colon        ":" :operator)
  (deftoken :conditional)
  (deftoken :bar2         "||" :operator)
  (deftoken :ampersand2   "&&" :operator)
  (deftoken :bar          "|" :operator)
  (deftoken :caret        "^" :operator)
  (deftoken :ampersand    "&" :operator)
  (deftoken :equals3      "===" :operator)
  (deftoken :not-equals2  "!==" :operator)
  (deftoken :equals2      "==" :operator)
  (deftoken :equals       "=" :operator)
  (deftoken :not-equals   "!=" :operator)
  (deftoken :urshift      ">>>" :operator)
  (deftoken :lshift       "<<" :operator)
  (deftoken :rshift       ">>" :operator)
  (deftoken :less-than    "<" :operator)
  (deftoken :less-than-equals "<=" :operator)
  (deftoken :greater-than ">" :operator)
  (deftoken :greater-than-equals ">=" :operator)
  
  (deftoken :asterisk     "*" :operator)
  (deftoken :slash        "/" :operator)
  (deftoken :percent      "%" :operator)
  (deftoken :bang         "!" :operator)
  (deftoken :tilde        "~" :operator)
  (deftoken :unary-plus)
  (deftoken :unary-minus)
  (deftoken :plus2        "++" :operator)
  (deftoken :minus2       "--" :operator)
  (deftoken :plus         "+" :operator)
  (deftoken :minus        "-" :operator)
  (deftoken :dot          "." :operator)
  (deftoken :left-bracket "[" :operator)
  (deftoken :right-bracket "]" :operator)
  (deftoken :left-curly   "{" :operator)
  (deftoken :right-curly  "}" :operator)
  (deftoken :left-paren   "(" :operator)
  (deftoken :right-paren  ")" :operator)
  
  ;; Keywords
  (deftoken :break        "break" :keyword)
  
negative.code: ;;;;; Token definitions
  (defmacro deftoken (symbol &optional key token-type)
    (cond
      ((eq token-type :operator-token)
       `(progn
         (setf (gethash ,key *tokens-to-symbols*) ,symbol)
         (setf (gethash ,symbol *symbols-to-tokens*) ,key)
         (push ,key *operator-tokens*)))
      ((eq token-type :operation)
       `(setf (gethash ,symbol *symbols-to-tokens*) ,key))
      ((eq token-type :keyword)
       `(progn
         (setf (gethash ,key *tokens-to-symbols*) ,symbol)
         (push ,symbol *keyword-symbols*)))
      (key
       `(setf (gethash ,key *tokens-to-symbols*) ,symbol))
      (t
  