数式文字列を解析するロジックを教えてください。

answer = expr("1 + ( 2 + 3 * 4 )");

trace(answer == 15);

こんなかんじで・・とりあえず変数とか関数は結構です。