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
const int transformed_data_origin
const int transformed_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