anchor.diff:      ((null b)
        ;; a is longer, therefore should go first
        t)
  -    ((and (symbolp (car a)) (not (symbolp (car b))))
  +    ((and (var-token-p (car a)) (literal-token-p (car b)))
        ;; a is a symbol and b isn't, so a should go later
        nil)
  -    ((and (not (symbolp (car a))) (symbolp (car b)))
  +    ((and (literal-token-p (car a)) (var-token-p (car b)))
        ;; a isn't a symbol and b is, so a should go first
        t)
  -    ((and (symbolp (car a)) (symbolp (car b)))
  +    ((and (var-token-p (car a)) (var-token-p (car b)))
        ;; both a and b are symbols, so check the next element
        (pattern-sort< (cdr a) (cdr b)))
       ((string= (car a) (car b))
  
positive.code:        (add-command (quote ,pattern) (quote ,flags) ',func-name)
         ',func-name)))
  
  (defparameter *parser-trace* nil)
  (defun trace-msg (fmt &rest args)
    (when *parser-trace*
      (slog "~?" fmt args)))
  
  (defun command-pattern-matches (pattern string)
    (loop
       with vars = nil
       with tokens = pattern
       while tokens
       for token = (car tokens)
  
negative.code: ;; "get" thing
  ;; "get"
  
  (defun literal-token-p (token)
    (or (stringp token)
        (characterp token)))
  
  (defun var-token-p (token)
    (not (literal-token-p token)))
  
  (defun pattern-sort< (a b)
    (cond
      ((and (null a) (null b))
  