The shunting yard or precedence climbing algorithms are better approaches to expression parsing. They make it trivial to add operators and change precedence levels without the convolutions of a recursive grammar. They also clear the way for user defined operators since the machinery is controlled with a table that can change dynamically.