anchor.diff:  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   ;;~~~~~~~~~~~~~~~~~~ Tokenizer ~~~~~~~~~~~~~~~~~::
   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  -;; Notes: *This tokenizer (and the <word> class) assumes that there is only one pos per existing word.
   ;
   ;; Part 1: Raw string -> list of strings
   ;; -------------------------------------
  
positive.code: ;; A basic parser
  ;; Grammar:
  ;; Command ::= verb [noun-phrase]
  ;; noun-phrase ::= [article] noun
  ;; article ::= "a" | "an" | "the"
  ;; verb ::= *verbs*
  ;; noun ::= *any object in the scope of player*
  
negative.code:   "Takes a raw STRING and returns a LIST with COMMAND-STRING and CHAT-STRING"
    (cl-ppcre:split "^+'| +'|\"" string :limit 2))
  
  (defun format-chat-string (chat-string)
    (if chat-string
        (concatenate 'string "'" chat-string)
        nil))
  
  (defun chat-string->token (chat-string)
    "Takes a CHAT-STRING, returns the corresponding <TOKEN>"
    (make-instance '<token> :token-string chat-string :type :chat-string))
  
  (defun string->token-list (string) ;;this is so ugly. Whatever...
    "Converts a STRING into a LIST of TOKEN-STRINGS."
    (let* ((com+chat (split-off-chat-string string))
  	 (commands (split-command-string (car com+chat)))
  	 (token-list (append commands (list (format-chat-string (cadr com+chat))))))
      token-list))
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;~~~~~~~~~~~~~~~~~~~~ Parser ~~~~~~~~~~~~~~~~~~;;
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  