1 #ifndef STAN_LANG_GRAMMARS_PROGRAM_GRAMMAR_DEF_HPP
2 #define STAN_LANG_GRAMMARS_PROGRAM_GRAMMAR_DEF_HPP
7 #include <boost/format.hpp>
8 #include <boost/fusion/include/std_pair.hpp>
9 #include <boost/spirit/home/support/iterators/line_pos_iterator.hpp>
10 #include <boost/spirit/include/phoenix_core.hpp>
11 #include <boost/spirit/include/qi.hpp>
21 typedef std::pair<std::vector<stan::lang::var_decl>,
22 std::vector<stan::lang::statement> > type;
27 (std::vector<stan::lang::function_decl_def>,
29 (std::vector<stan::lang::var_decl>, data_decl_)
30 (DUMMY_STRUCT::type, derived_data_decl_)
31 (std::vector<stan::lang::var_decl>, parameter_decl_)
32 (DUMMY_STRUCT::type, derived_decl_)
34 (DUMMY_STRUCT::type, generated_decl_) )
41 template <
typename Iterator>
42 program_grammar<Iterator>::program_grammar(
const std::string& model_name)
43 : program_grammar::base_type(program_r),
44 model_name_(model_name),
47 expression_g(var_map_, error_msgs_),
48 var_decls_g(var_map_, error_msgs_),
49 statement_g(var_map_, error_msgs_),
50 functions_g(var_map_, error_msgs_) {
51 using boost::spirit::qi::eps;
52 using boost::spirit::qi::lit;
53 using boost::spirit::qi::on_error;
54 using boost::spirit::qi::rethrow;
55 using boost::spirit::qi::_1;
56 using boost::spirit::qi::_2;
57 using boost::spirit::qi::_3;
58 using boost::spirit::qi::_4;
63 program_r.name(
"program");
67 > -derived_data_var_decls_r
70 > -derived_var_decls_r
73 > -generated_var_decls_r;
75 model_r.name(
"model declaration (or perhaps an earlier block)");
81 "one of the following:\n"
82 " a variable declaration, beginning with type,\n"
83 " (int, real, vector, row_vector, matrix, unit_vector,\n"
84 " simplex, ordered, positive_ordered,\n"
85 " corr_matrix, cov_matrix,\n"
86 " cholesky_corr, cholesky_cov\n"
87 " or '}' to close variable declarations");
88 end_var_decls_r %= lit(
'}');
90 end_var_decls_statements_r.name(
91 "one of the following:\n"
92 " a variable declaration, beginning with type\n"
93 " (int, real, vector, row_vector, matrix, unit_vector,\n"
94 " simplex, ordered, positive_ordered,\n"
95 " corr_matrix, cov_matrix,\n"
96 " cholesky_corr, cholesky_cov\n"
98 " or '}' to close variable declarations and definitions");
99 end_var_decls_statements_r %= lit(
'}');
101 end_var_definitions_r.name(
"expected another statement or '}'"
102 " to close declarations");
103 end_var_definitions_r %= lit(
'}');
105 data_var_decls_r.name(
"data variable declarations");
112 derived_data_var_decls_r.name(
"transformed data block");
113 derived_data_var_decls_r
114 %= ((lit(
"transformed")
120 > end_var_definitions_r)
122 > end_var_decls_statements_r));
124 param_var_decls_r.name(
"parameter variable declarations");
126 %= (lit(
"parameters")
131 derived_var_decls_r.name(
"derived variable declarations");
133 %= (lit(
"transformed")
138 > end_var_decls_statements_r;
140 generated_var_decls_r.name(
"generated variable declarations");
141 generated_var_decls_r
147 > end_var_decls_statements_r;
149 on_error<rethrow>(program_r,
151 boost::phoenix::ref(var_map_),
152 boost::phoenix::ref(error_msgs_)));
const int parameter_origin
Probability, optimization and sampling library.
boost::phoenix::function< program_error > program_error_f
const int transformed_parameter_origin
boost::phoenix::function< remove_lp_var > remove_lp_var_f
const int model_name_origin
boost::phoenix::function< add_lp_var > add_lp_var_f
BOOST_FUSION_ADAPT_STRUCT(stan::lang::program,(std::vector< stan::lang::function_decl_def >, function_decl_defs_)(std::vector< stan::lang::var_decl >, data_decl_)(DUMMY_STRUCT::type, derived_data_decl_)(std::vector< stan::lang::var_decl >, parameter_decl_)(DUMMY_STRUCT::type, derived_decl_)(stan::lang::statement, statement_)(DUMMY_STRUCT::type, generated_decl_)) namespace stan
const int transformed_data_origin