went in a bit of a crazy direction with pratt parser