Rewrite parser to follow s-exp grammar more closely.

A program can consist of multiple sexps. Each sexp consists of
multiple atoms or lists. Each lists consists of multiple sexps