2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 C++: вычислить строковое выражение
Сообщение07.09.2017, 19:42 
Аватара пользователя


31/12/13
148
В MATLAB реализовано вычисление строк вида 1+2*3. При помощи регулярных выражений строка преобразуется в строку вида u(1)+u(2)*u(3) и передаётся в функцию eval, в массиве u хранятся числа. Если точнее, то вероятности событий, оператор + переопределен.
Как подобное реализовать в C++?
В процессе выполнения кода получаем массив u, как его свернуть в одно число по заранее известной формуле? У Страуструпа в Programming: Principles and Practice Using C++ разбирается калькулятор (Recursive descent parser), вроде как в нем все это и нужно делать: вычислять строку с заранее введенной переменной u.
Возможно есть более простое решение?

 Профиль  
                  
 
 Re: C++: вычислить строковое выражение
Сообщение07.09.2017, 20:00 
Заслуженный участник


09/05/12
25179
Написать синтаксический анализатор или воспользоваться уже готовым. Посмотрите, например, описания программ flex и GNU bison.

 Профиль  
                  
 
 Re: C++: вычислить строковое выражение
Сообщение07.09.2017, 20:03 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Я бы сказал, это ближе к Boost::Proto, чем к flex/bison, но это уж что кому ближе.

 Профиль  
                  
 
 Re: C++: вычислить строковое выражение
Сообщение07.09.2017, 20:08 
Заслуженный участник


04/03/09
906
Если я правильно понял задачу, достаточно взять парсер арифметических выражений (легко гуглится) и в процессе вычисления вместо чисел подставлять значения элементов массива с соответствующим индексом. Парсить надо исходное выражение, до подстановки u.

 Профиль  
                  
 
 Re: C++: вычислить строковое выражение
Сообщение07.09.2017, 22:50 
Заслуженный участник


28/04/09
1933
Вместо связки flex+bison можно использовать более приятный в обращении ANTLR и его C++ target.

 Профиль  
                  
 
 Re: C++: вычислить строковое выражение
Сообщение07.09.2017, 23:46 
Заслуженный участник


02/08/11
6889
Также вместо связки flex + bison можно использовать flexc++ + bisonc++ - практически то же самое, но приятнее в использовании.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group