Статьи Королевства Дельфи


S003 - часть 2


Алгоритм вычисления выражений

Вычисление выражений, заданных символьной строкой.
Поддерживает математические функции и символьные переменные. Код хорошо откомментирован.
Небольшие выдержки из описания автора:

Алгоритм вычисления выражений (мне его рассказал Копылов Павел Николаевич, наш школьный учитель информатики)

В дальнейшем, если специально не оговорено обратное, для краткости под операцией сложения подразумевается операция сложения или вычитания, под операцией умножения - операция умножения или деления. Операции из каждой этой пары имеют одинаковый приоритет, поэтому при анализе выражения нет смысла различать их. Соответствующий смысл приобретают слова "слагаемое" и "множитель".

Элементарной единицей выражения является множитель (multiplier). Множителем называется число, переменная, функция или выражение в скобках. Последовательность множителей, соединённых знаками умножения, называется слагаемым (addend). Последовательность слагаемых, соединённых знаками сложения - выражением (expression). Легко заметить, что эти определения рекурсивны, то есть для определения понятия "выражение" требуется определить понятие "множитель", одна из возможных форм которого - выражение в скобках. Кроме того, аргумент функции также является выражением. Это предопределяет способ реализации алгоритма. Обратите внимание, что определения множителей и слагаемых даны "с другого конца". Обычно сначала определяется операция (например, сложения), а потом её опреанды называются слагаемыми. В нашем случае сначала определяется, что такое слагаемое, а затем операцией сложения называется та операция, которая связывает их между собой. Это существенно для понимания алгоритма, потому что при анализе выражения первичным является распознавание и классификация множителей по типу, вторичным - объединение их в слагаемые, и на третьем месте - окончательное вычисление выражение (т.е. сложение этих самых слагаемых). Важно, что на самом деле это деление на первичное, вторичное и третичное существенно именно для понимания алгоритма работы: по времени эти операции не разделены.




Начало  Назад  Вперед