Я бы предложил такое:
* Лексический анализатор - читает текст, по запросу отдаёт следующую лексему(число, операция, скобка и тд), знает, где сейчас находится относительно текста;
* Синтаксический анализатор - берёт из лексического лексемы, хранит в себе состояние относительно выражения(не текста), строит некое представление (например,
полиз);
* Возможно, собственно это представление, если стандартными контейнерами не обойтись;
* Интерпретатор - по представлению вычисляет конечное значение (результат выражения);
* Ну, и возможно, пресловутый калькулятор, чтобы всё это красиво объединить и вычисление выглядело так: подал на вход строку, получил на выходе результат.
P.S. Это всё нужно, если вы не пользоваться просто eval'ом собираетесь, а хотите реально написать сами.
P.P.S. почитал остальных отвечающих, и уточню - то, что я описал, это просто "сферический калькулятор в вакууме", не зависящий от UI, ни от чего не зависящий, фактически.