Давайте используем более сложную строку в качестве примера: 1+12x8
. То, что следует, является грубым планом;вам нужно предоставить реализацию для каждого шага.
Сначала вы токенизируете ее, превратив 1+12x8
в ['1', '+', '12', 'x', '8']
. Для этого шага вам нужно написать токенизатор или лексический анализатор. На этом шаге вы определяете свои операторы и литералы.
Далее вы конвертируете поток токенов в дерево разбора. Возможно, вы представляете дерево как S-выражение ['+', '1', ['x', '12', '8']]
или [operator.add, 1, [operator.mul, 12, 8]]
. Этот шаг требует написания парсера, который требует от вас определения таких вещей, как приоритет ваших операторов.
Наконец, вы пишете оценщик, который может уменьшить ваше дерево разбора до единого значения. Выполнение этого в два этапа может привести к
[operator.add, 1, [operator.mul, 12, 8]]
до [operator.add, 1, 96]
[operator.add, 1, 96]
до 97