first pass at ast