|
electric_retard |
|
|
|
В 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 |
|
|
|
Написать синтаксический анализатор или воспользоваться уже готовым. Посмотрите, например, описания программ flex и GNU bison.
|
|
|
|
 |
|
Xaositect |
|
|
Я бы сказал, это ближе к Boost::Proto, чем к flex/bison, но это уж что кому ближе.
|
|
|
|
 |
|
12d3 |
|
|
|
Если я правильно понял задачу, достаточно взять парсер арифметических выражений (легко гуглится) и в процессе вычисления вместо чисел подставлять значения элементов массива с соответствующим индексом. Парсить надо исходное выражение, до подстановки u.
|
|
|
|
 |
|
EtCetera |
|
|
Вместо связки flex+bison можно использовать более приятный в обращении ANTLR и его C++ target.
|
|
|
|
 |
|
warlock66613 |
|
|
|
Также вместо связки flex + bison можно использовать flexc++ + bisonc++ - практически то же самое, но приятнее в использовании.
|
|
|
|
 |