1 #ifndef __STAN__GM__PARSER__STATEMENT_2_GRAMMAR_DEF__HPP__ 2 #define __STAN__GM__PARSER__STATEMENT_2_GRAMMAR_DEF__HPP__ 16 #include <boost/spirit/include/qi.hpp> 18 #include <boost/spirit/include/phoenix_core.hpp> 19 #include <boost/spirit/include/phoenix_function.hpp> 20 #include <boost/spirit/include/phoenix_fusion.hpp> 21 #include <boost/spirit/include/phoenix_object.hpp> 22 #include <boost/spirit/include/phoenix_operator.hpp> 23 #include <boost/spirit/include/phoenix_stl.hpp> 25 #include <boost/lexical_cast.hpp> 26 #include <boost/fusion/include/adapt_struct.hpp> 27 #include <boost/fusion/include/std_pair.hpp> 28 #include <boost/config/warning_disable.hpp> 29 #include <boost/spirit/include/qi.hpp> 30 #include <boost/spirit/include/qi_numeric.hpp> 31 #include <boost/spirit/include/classic_position_iterator.hpp> 32 #include <boost/spirit/include/phoenix_core.hpp> 33 #include <boost/spirit/include/phoenix_function.hpp> 34 #include <boost/spirit/include/phoenix_fusion.hpp> 35 #include <boost/spirit/include/phoenix_object.hpp> 36 #include <boost/spirit/include/phoenix_operator.hpp> 37 #include <boost/spirit/include/phoenix_stl.hpp> 38 #include <boost/spirit/include/support_multi_pass.hpp> 39 #include <boost/tuple/tuple.hpp> 40 #include <boost/variant/apply_visitor.hpp> 41 #include <boost/variant/recursive_variant.hpp> 59 template <
typename T1,
typename T2,
typename T3>
63 std::stringstream& error_msgs)
const {
64 if (!
e.expression_type().is_primitive()) {
65 error_msgs <<
"conditions in if-else statement must be primitive int or real;" 66 <<
" found type=" <<
e.expression_type() << std::endl;
76 template <
typename T1,
typename T2>
87 template <
typename Iterator>
89 std::stringstream& error_msgs,
93 error_msgs_(error_msgs),
94 expression_g(var_map,error_msgs),
97 using boost::spirit::qi::_1;
98 using boost::spirit::qi::char_;
99 using boost::spirit::qi::lit;
100 using boost::spirit::qi::_pass;
101 using boost::spirit::qi::_val;
103 using boost::spirit::qi::labels::_r1;
104 using boost::spirit::qi::labels::_r2;
statement_2_grammar(variable_map &var_map, std::stringstream &error_msgs, statement_grammar< Iterator > &sg)
std::vector< expression > conditions_
std::stringstream & error_msgs_
boost::phoenix::function< add_conditional_condition > add_conditional_condition_f
Probability, optimization and sampling library.
boost::spirit::qi::rule< Iterator, statement(bool, var_origin), whitespace_grammar< Iterator > > statement_2_r
void operator()(conditional_statement &cs, const statement &s) const
boost::phoenix::function< add_conditional_body > add_conditional_body_f
std::vector< statement > bodies_
expression_grammar< Iterator > expression_g
boost::spirit::qi::rule< Iterator, conditional_statement(bool, var_origin), whitespace_grammar< Iterator > > conditional_statement_r
statement_grammar< Iterator > & statement_g
double e()
Return the base of the natural logarithm.
bool operator()(conditional_statement &cs, const expression &e, std::stringstream &error_msgs) const