1 #ifndef __STAN__GM__PARSER__PROGRAM_GRAMMAR_DEF__HPP__ 2 #define __STAN__GM__PARSER__PROGRAM_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> 53 typedef std::pair<std::vector<stan::gm::var_decl>,
54 std::vector<stan::gm::statement> > type;
60 (std::vector<stan::gm::var_decl>, data_decl_)
61 (DUMMY_STRUCT::type, derived_data_decl_)
62 (std::vector<stan::gm::var_decl>, parameter_decl_)
63 (DUMMY_STRUCT::type, derived_decl_)
65 (DUMMY_STRUCT::type, generated_decl_) )
74 struct result {
typedef void type; };
75 void operator()(variable_map& vm)
const {
77 base_var_decl(
"lp__",std::vector<expression>(),
DOUBLE_T),
81 boost::phoenix::function<add_lp_var> add_lp_var_f;
83 struct remove_lp_var {
85 struct result {
typedef void type; };
86 void operator()(variable_map& vm)
const {
90 boost::phoenix::function<remove_lp_var> remove_lp_var_f;
93 template <
typename Iterator>
95 : program_grammar::base_type(program_r),
98 expression_g(var_map_,error_msgs_),
99 var_decls_g(var_map_,error_msgs_),
100 statement_g(var_map_,error_msgs_) {
102 using boost::spirit::qi::eps;
103 using boost::spirit::qi::lit;
105 program_r.name(
"program");
108 > -derived_data_var_decls_r
111 > eps[add_lp_var_f(boost::phoenix::ref(var_map_))]
112 > -derived_var_decls_r
114 > eps[remove_lp_var_f(boost::phoenix::ref(var_map_))]
115 > -generated_var_decls_r
118 model_r.name(
"model declaration");
124 data_var_decls_r.name(
"data variable declarations");
131 derived_data_var_decls_r.name(
"transformed data block");
132 derived_data_var_decls_r
133 %= lit(
"transformed")
140 param_var_decls_r.name(
"parameter variable declarations");
147 derived_var_decls_r.name(
"derived variable declarations");
149 %= lit(
"transformed")
156 generated_var_decls_r.name(
"generated variable declarations");
157 generated_var_decls_r
165 using boost::spirit::qi::on_error;
166 using boost::spirit::qi::rethrow;
167 on_error<rethrow>(program_r,
168 (std::ostream&)error_msgs_
170 << boost::phoenix::val(
"Parser expecting: ")
171 << boost::spirit::qi::labels::_4);
const int parameter_origin
Probability, optimization and sampling library.
BOOST_FUSION_ADAPT_STRUCT(stan::gm::program,(std::vector< stan::gm::var_decl >, data_decl_)(DUMMY_STRUCT::type, derived_data_decl_)(std::vector< stan::gm::var_decl >, parameter_decl_)(DUMMY_STRUCT::type, derived_decl_)(stan::gm::statement, statement_)(DUMMY_STRUCT::type, generated_decl_)) namespace stan
const int transformed_data_origin
const int transformed_parameter_origin