first pass at grammar