Ещё можно написать синтаксический анализатор на специальном языке — ищите по словам yacc (для Си), javacc, jjtree (для Java), bison (для Си, Си++ и Java). Вот, к примеру,
простенькая JJTree-грамматика, которая разбирает примерно такие выражения, как вам нужно, с поддержкой переменных, шестнадцатеричных чисел, комментариев и т. д. И всего сто строчек. Используя JavaCC+JJTree вы по файлу грамматики автоматически можете создать Java-классы, которые позволят легко превратить выражение в абстрактное синтаксическое дерево (AST). По этому дереву уже можно сделать что угодно — выполнить вычисления, скомпилировать в машинный код, перевести в любой другой язык (скажем, MathML), красиво отрендерить на экране с многоэтажными дробями и т. д. Файлы грамматик обычно гораздо проще поддерживать и расширять, чем ковыряться с рекурсивным спуском.