1 #ifndef STAN__GM__PARSER__EXPRESSION_GRAMMAR07_DEF__HPP__
2 #define STAN__GM__PARSER__EXPRESSION_GRAMMAR07_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>
55 template <
typename T1,
typename T2>
59 std::ostream& error_msgs)
const {
61 error_msgs <<
"expression is ill formed" << std::endl;
71 template <
typename T1,
typename T2>
75 std::ostream& error_msgs)
const {
76 std::vector<expr_type> arg_types;
77 for (
size_t i = 0; i < fun.
args_.size(); ++i)
78 arg_types.push_back(fun.
args_[i].expression_type());
88 template <
typename T1,
typename T2,
typename T3>
93 std::ostream& error_msgs)
const {
96 return expr1 += expr2;
98 std::vector<expression> args;
99 args.push_back(expr1);
100 args.push_back(expr2);
105 return expr1 += expr2;
112 template <
typename T1,
typename T2,
typename T3>
117 std::ostream& error_msgs)
const {
120 return expr1 -= expr2;
122 std::vector<expression> args;
123 args.push_back(expr1);
124 args.push_back(expr2);
126 fun f(
"subtract",args);
135 template <
typename Iterator>
137 std::stringstream& error_msgs,
141 error_msgs_(error_msgs),
142 term_g(var_map,error_msgs,eg)
144 using boost::spirit::qi::_1;
145 using boost::spirit::qi::char_;
146 using boost::spirit::qi::double_;
147 using boost::spirit::qi::eps;
148 using boost::spirit::qi::int_;
149 using boost::spirit::qi::lexeme;
150 using boost::spirit::qi::lit;
151 using boost::spirit::qi::_pass;
152 using boost::spirit::qi::_val;
153 using boost::spirit::qi::labels::_r1;
161 [_val =
addition3_f(_val,_1,boost::phoenix::ref(error_msgs))] )
165 [_val =
subtraction3_f(_val,_1,boost::phoenix::ref(error_msgs))] )
static function_signatures & instance()
expression operator()(expression &expr1, const expression &expr2, std::ostream &error_msgs) const
std::vector< expression > args_
boost::phoenix::function< validate_expr_type3 > validate_expr_type3_f
term_grammar< Iterator > term_g
std::stringstream & error_msgs_
boost::phoenix::function< addition_expr3 > addition3_f
expression07_grammar(variable_map &var_map, std::stringstream &error_msgs, expression_grammar< Iterator > &eg)
boost::phoenix::function< set_fun_type3 > set_fun_type3_f
fun operator()(fun &fun, std::ostream &error_msgs) const
boost::phoenix::function< subtraction_expr3 > subtraction3_f
bool is_ill_formed() const
expression operator()(expression &expr1, const expression &expr2, std::ostream &error_msgs) const
boost::spirit::qi::rule< Iterator, expression(var_origin), whitespace_grammar< Iterator > > expression07_r
expr_type get_result_type(const std::string &name, const std::vector< expr_type > &args, std::ostream &error_msgs)
bool operator()(const expression &expr, std::ostream &error_msgs) const
expr_type expression_type() const
bool is_primitive() const