Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия, Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки
В 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
Написать синтаксический анализатор или воспользоваться уже готовым. Посмотрите, например, описания программ flex и GNU bison.
Xaositect
Re: C++: вычислить строковое выражение
07.09.2017, 20:03
Я бы сказал, это ближе к Boost::Proto, чем к flex/bison, но это уж что кому ближе.
12d3
Re: C++: вычислить строковое выражение
07.09.2017, 20:08
Если я правильно понял задачу, достаточно взять парсер арифметических выражений (легко гуглится) и в процессе вычисления вместо чисел подставлять значения элементов массива с соответствующим индексом. Парсить надо исходное выражение, до подстановки u.
EtCetera
Re: C++: вычислить строковое выражение
07.09.2017, 22:50
Вместо связки flex+bison можно использовать более приятный в обращении ANTLR и его C++ target.
warlock66613
Re: C++: вычислить строковое выражение
07.09.2017, 23:46
Также вместо связки flex + bison можно использовать flexc++ + bisonc++ - практически то же самое, но приятнее в использовании.