electric_retard |
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. Возможно есть более простое решение?
|
|
|
|
 |
Pphantom |
Re: C++: вычислить строковое выражение  07.09.2017, 20:00 |
|
Заслуженный участник |
 |
09/05/12 25179
|
Написать синтаксический анализатор или воспользоваться уже готовым. Посмотрите, например, описания программ flex и GNU bison.
|
|
|
|
 |
Xaositect |
Re: C++: вычислить строковое выражение  07.09.2017, 20:03 |
|
Заслуженный участник |
 |
06/10/08 6422
|
Я бы сказал, это ближе к Boost::Proto, чем к flex/bison, но это уж что кому ближе.
|
|
|
|
 |
12d3 |
Re: C++: вычислить строковое выражение  07.09.2017, 20:08 |
|
Заслуженный участник |
 |
04/03/09 917
|
Если я правильно понял задачу, достаточно взять парсер арифметических выражений (легко гуглится) и в процессе вычисления вместо чисел подставлять значения элементов массива с соответствующим индексом. Парсить надо исходное выражение, до подстановки u.
|
|
|
|
 |
EtCetera |
Re: C++: вычислить строковое выражение  07.09.2017, 22:50 |
|
Заслуженный участник |
 |
28/04/09 1933
|
Вместо связки flex+bison можно использовать более приятный в обращении ANTLR и его C++ target.
|
|
|
|
 |
warlock66613 |
Re: C++: вычислить строковое выражение  07.09.2017, 23:46 |
|
Заслуженный участник |
 |
02/08/11 7059
|
Также вместо связки flex + bison можно использовать flexc++ + bisonc++ - практически то же самое, но приятнее в использовании.
|
|
|
|
 |
|
Страница 1 из 1
|
[ Сообщений: 6 ] |
|
Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы