Кто мешает в структуру [Приоритет, Операция] впилить и Позицию? Хотя зачем она вам?
Вам нужно распарсить введенное выражение в удобную для обработки рекурсией или циклом форму.
Я бы стремился к такой записи (для 5+15*2/10+2^3):
array(
0 => '2^3',
1 => '2/10',
2 => '15*{1}',
3 => '5+{2}',
4 => '{3}+{0},
);
Такой массив проходится одним циклом с простым switch. Но да, вопрос заключался в алгоритме такого разбора =).