Ваш код сейчас теоретически знает, как анализировать и оценивать правильные простые математические выражения. Под простыми выражениями я имею в виду выражения, состоящие только из известных унарных и двоичных операторов и чисел (без скобок)
Выражение, которое вы сейчас пытаетесь проанализировать: либо:
- Простое выражение
- выражение в скобках
- Сложное выражение, состоящее из простых выражений и выражений в скобках
Если дело № 1, то вы уже знаете, как с ним справиться; разбери его и все готово.
Если это случай №2, просто удалите скобки и проанализируйте выражение внутри.
Если это случай №3, тогда вы берете выражения в скобках верхнего уровня и анализируете их; Вы будете либо в шаге 1 или 2 или 3 и эй! Угадай, что? Вы уже знаете, как справиться с этим.
В конце концов вы разобьете свое выражение на простые выражения. Тогда вам просто нужно вернуться к оценке на обратном пути.
В простом английском вам нужен рекурсивный парсер; синтаксический анализатор, который может вызывать себя, анализировать и оценивать вложенные выражения.
Рассмотрим для примера:
e0: 1 + (2 * (3 - 2))
- e0: вы анализируете
1 + p0
- p0: Вы анализируете
2 * p1
- p1: Вы анализируете
3 - 2
- Вы закончили анализ
- p1: оценивается как
1
- p0: оценивается как
2
- e0: оценивается в
3
- Вы закончили.
Круто в этом то, что синтаксический анализатор может обрабатывать, теоретически, бесконечные вложенные выражения ... проблема в том, что ваш компьютер, вероятно, не может.