                     (let ((id (car expr)))
                       `(prog1 ,id (setq ,id (1- ,id))))))
     (assign    . ,(lambda (token assign)
-                    (destructuring-bind (id eq expr) assign
-                      `(setq ,id ,expr))))
+                    (destructuring-bind (lhs eq expr) assign
+                      `(setf ,lhs ,expr))))
     (+         . ,(lambda (token op) (cons 'psl-+ (nth 2 op))))
     (-         . ,(lambda (token op) (cons 'psl-- (nth 2 op))))
     (<         . ,(lambda (token op) (cons '< (nth 2 op))))

(eval-when-compile (require 'cl))

(defun psl-compile-to-elisp ()
  "Compile the current buffer into an Emacs Lisp s-expression."

    (inc-post  id "++")
    (dec-pre   "--" id)
    (dec-post  id "--")
    (assign    [index id] "=" expr)

    ;; Objects
    (pairs     pair [("," pairs) ""])
