Пытаюсь разобраться со спиритом, но чего-то не могу собрать код с его использованием, может кто подскажет что я делаю не так? calc.h: #ifndef CALC_H #define CALC_H #include <boost/spirit/core.hpp> #include <stack> class Calc { public: double evaluate(char *expr); void do_push_value(double x){}; void do_add(char const*, char const*){}; void do_subt(char const*, char const*){}; void do_mult(char const*, char const*){}; void do_div(char const*, char const*){}; void do_pow(char const*, char const*){}; void do_neg(char const*, char const*){}; void do_cos(char const*, char const*){}; void do_sin(char const*, char const*){}; struct calculator : public boost::spirit::grammar<calculator> { template <typename ScannerT> struct definition { definition(calculator const&) { expression = term >> *( ('+' >> term)[&Calc::do_add] | ('-' >> term)[&Calc::do_subt] ) ; term = factor >> *( ('*' >> factor)[&Calc::do_mult] | ('/' >> factor)[&Calc::do_div] | ('^' >> factor)[&Calc::do_pow] ) ; factor = boost::spirit::real_p[&Calc::do_push_value] | '(' >> expression >> ')' | ('-' >> factor)[&Calc::do_neg] | ("cos" >> factor)[&Calc::do_cos] | ("sin" >> factor)[&Calc::do_sin] | ('+' >> factor) ; } boost::spirit::rule<ScannerT> expression, term, factor; boost::spirit::rule<ScannerT> const& start() const { return expression; } }; } calc; std::stack<double> stack; }; #endif // CALC_H calc.cpp: #include "calc.h" using namespace boost::spirit; ... double Calc::evaluate(char* expr) { parse_info<> info = parse(expr, calc, space_p); }; ..
![](/img/p.gif)
![](/img/p.gif)
![](/photos/16164:-1541100864.png)
Ответ на:
комментарий
от V_L_A_D
![](/img/p.gif)
Ответ на:
комментарий
от V_L_A_D
![](/img/p.gif)
Ответ на:
комментарий
от anonymous
![](/img/p.gif)
Ответ на:
комментарий
от Legioner
![](/photos/16164:-1541100864.png)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум boost::spirit и CharT != char (2005)
- Форум Калькуляторн на boost::spirit (2009)
- Форум [C++, boost::spirit::phoenix, std::get] Обернуть std::get в phoenix-овскую function (2011)
- Форум μt — C++20 библиотека модульного тестирования (2024)
- Форум Альтернативы boost::spirit (2020)
- Форум boost::spirit, понимание внутренностей. (2013)
- Форум boost::spirit, результат выражения. (2013)
- Форум Вопросы по boost::spirit (2015)
- Форум boost::spirit parse to double (2015)
- Форум Пытаюсь читать исходники boost::spirit. (2013)