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;
boost::phoenix::function< add_conditional_condition > add_conditional_condition_f
boost::phoenix::function< add_conditional_body > add_conditional_body_f
double e()
Return the base of the natural logarithm.
Probability, optimization and sampling library.
void operator()(conditional_statement &cs, const statement &s) const
bool operator()(conditional_statement &cs, const expression &e, std::stringstream &error_msgs) const
std::vector< expression > conditions_
std::vector< statement > bodies_
statement_2_grammar(variable_map &var_map, std::stringstream &error_msgs, statement_grammar< Iterator > &sg)
boost::spirit::qi::rule< Iterator, conditional_statement(bool, var_origin), whitespace_grammar< Iterator > > conditional_statement_r
statement_grammar< Iterator > & statement_g
expression_grammar< Iterator > expression_g
std::stringstream & error_msgs_
boost::spirit::qi::rule< Iterator, statement(bool, var_origin), whitespace_grammar< Iterator > > statement_2_r