Сообщений 11    Оценка 241 [+2/-0]         Оценить  
Система Orphus

Класс TParser

Парсер математических выражений

Автор: Александр Шаргин
Опубликовано: 9.04.2001
Исправлено: 13.03.2005
Версия текста: 1.0

Класс TParser
Программа-пример Solver

Класс TParser занимается разбором математических выражений. Его можно применять в любых программах, в которых требуется расчёт значений функций, задаваемых пользователем. Класс написан на Visual C++, но может практически без изменений применяться с любыми другими компиляторами языка C++.

Основные возможности класса:

Использовать класс TParser достаточно просто. Сначала нужно создать экземпляр класса любым способом, например:

TParser parser;

Затем задаётся и компилируется некоторое математическое выражение. Для этого используется функция TParser::Compile, например:

parser.Compile("(sin(x[0]) + 2^x[1])/2");

Теперь можно вычислять значение выражения в любой точке, используя одну из версий перегруженной функции TParser::Evaluate:

double values[] = { 1.0, 2.0 };

...

// Способ 1
parser.Evaluate(1.0, 2.0);

// Способ 2
parser.Evaluate(values);

// Способ 3
parser.SetX(values);
parser.Evaluate();

Как видим, вектор переменных можно хранить в массиве типа double, а можно просто передать значения всех переменных в функцию Evaluate. Все версии этой функции возвращают полученный результат в виде double. Обратиться к последнему полученному результату можно также, используя функцию TParser::GetResult().

Как я уже говорил, информация об ошибках в выражении передаётся через структуру TError. Рассмотрим пример обработки ошибок в выражении.

try
{
   // Посчитать значение выражения.
   parser.Compile("2*(1+3"); // "Забыли" закрывающую скобку.
   parser.Evaluate();
   cout << parser.GetResult() << endl << endl;
}
catch(TError error)
{
   // Выдать сообщение об ошибке.
   cerr << error.error << " at position " << error.pos << endl << endl;
}

При выполнении эта программа напечатает сообщение:

')' or ']' expected at position 6

Программа-пример Solver демонстрирует применение класса TParser. Solver - это простой консольный калькулятор, который позволяет вам запоминать значения в десяти переменных (x[0]...x[9]) и обсчитывать любые выражения, поддерживаемые классом TParser.


Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.
    Сообщений 11    Оценка 241 [+2/-0]         Оценить