more abstract parser (job in progress)