 
 (defvar psl-tokens
   '((expr      [block defvar deffun number object lambda funcall string
-                true false id])
+                true false if while for id])
     (defvar    "defvar" id "=" expr "in" expr)
     (deffun    "deffun" id params expr "in" expr)
     (lambda    "lambda" params expr)

                   `(cons (quote ,(nth 0 pair)) ,(nth 2 pair))))
    (pairs    . ,#'psl--tuck)
    (object   . ,(lambda (token obj)
                   (cons 'list (nth 1 obj)))))
  "Syntax tree manipulation functions.")

(defun psl--tuck (token names)

    (string  . "\"\\(?:[^\"\\\\]\\|\\\\.\\)*\"")
    (block     "{" exprs "}")
    (exprs     expr [(";" exprs) ""])

    ;; Control structures
    (if        "if" expr "then" expr "else" expr)
    (while     "while" expr expr)
    (for       "for" "(" expr ";" expr ";" expr ")" expr)

    ;; Identifiers
    (id      . "[a-zA-Z<>=+-]+")
