Немного сложно посоветовать, не видя больше вашего кода. Тем не менее, из того, что вы описываете, кажется, что вы в основном разбираетесь в символах, чтобы распознать различные биты пунктуации и отличить имена переменных от числовых констант от алгебраических операторов. nestedExpr придаст некоторую структуру, но только базовую вложенность в скобках - это все еще оставляет обработку приоритета оператора для вашей работы после разбора.
Если вы изучаете синтаксический анализ инфиксной нотации, существует последовательность примеров анализа и просмотра (см. На странице Примеры випинга ). Начнем с fourFn.py, который на самом деле является пять парсером записи инфиксных функций. Посмотрите его метод BNF () и получите представление о том, как работают рекурсивные определения (пока не беспокойтесь о действиях разбора pushFirst). Путем структурирования синтаксического анализатора таким образом, приоритет оператора встроен прямо в анализируемые результаты. Если вы анализируете 4 + 2 * 3
, простой токенизатор просто дает вам ['4','+','2','*','3']
, а затем вам нужно выяснить, как сделать 2 * 3, прежде чем добавлять 4, чтобы получить 10, а не только грубую силу, добавить 4 и 2, а затем умножить на 3 (что дает неправильный ответ 18). Анализатор в fourFn.py даст вам ['4','+',['2','*','3']]
, что является достаточной структурой, чтобы вы могли оценить часть 2 * 3, прежде чем добавить ее в 4.
Вся эта концепция синтаксического анализа инфиксной записи с приоритетом операций настолько распространена, что я написал вспомогательную функцию, выполняющую большую часть тяжелой работы, которая называется operatorPrecedence
. Вы можете увидеть, как это работает в примере simpleArith.py, а затем перейти к eval_arith.py, чтобы увидеть, что расширения должны создать оценщик анализируемой структуры. simpleBool.py - еще один хороший пример, показывающий приоритет для логических терминов AND и ED вместе.
Наконец, поскольку вы делаете что-то, похожее на Excel, взгляните на excelExpr.py. Он пытается справиться с некоторыми безумными угловыми случаями, которые возникают при попытке оценить ссылки на ячейки Excel, в том числе ссылки на другие листы и другие рабочие книги.
Удачи!