+ (defevaluator :beginning-of-symbols " *;[^\\n]*"
+ (lambda () (set-state :normal)))
+ (defevaluator :beginning-of-symbols-with-separator " *;[^\\n]*"
+ (lambda () (set-state :comment-with-separator)))
+ (defevaluator :normal " *;[^\\n]*"
+ (lambda () (set-state :normal)))
+ (defevaluator :normal "\\("
+ (lambda ()
+ (push (list *line-no* *col-no*) *form-stack*)
+ (set-state :first-symbol)))
+ (defevaluator :first-symbol "\\("
+ (lambda ()
+ (cond
+ ((and (not *form-stack*) (not (zerop *col-no*))) "Top level forms must begin on first column")
+ ((and *form-stack* (/= (1+ (cadr (car *form-stack*))) *col-no*))
+ "All form elements must be indented equally")
+ (t
+ (push (list *line-no* *col-no*) *form-stack*)
+ (set-state :first-symbol)))))