first pass at parser