shunting yard is too restrictive, implemented a Pratt parser