recursive descent (WIP)