1 #ifndef STAN_LANG_GRAMMARS_STATEMENT_GRAMMAR_DEF_HPP
2 #define STAN_LANG_GRAMMARS_STATEMENT_GRAMMAR_DEF_HPP
12 #include <boost/spirit/include/qi.hpp>
13 #include <boost/phoenix/phoenix.hpp>
20 (std::vector<stan::lang::idx>, idxs_)
24 (
stan::lang::variable_dims, var_dims_)
25 (
stan::lang::expression, expr_) )
29 (
std::vector<
stan::lang::expression>, dims_) )
32 (
std::
string, family_)
33 (
std::vector<
stan::lang::expression>, args_) )
36 (
std::
string, variable_)
37 (
stan::lang::range, range_)
38 (
stan::lang::statement, statement_) )
41 (
stan::lang::expression, return_value_) )
44 (
std::vector<
stan::lang::printable>, printables_) )
47 (
std::vector<
stan::lang::printable>, printables_) )
50 (
stan::lang::expression, log_prob_) )
53 (
stan::lang::expression, expr_)
54 (
stan::lang::distribution, dist_)
55 (
stan::lang::range, truncation_) )
58 (
std::vector<
stan::lang::var_decl>, local_decl_)
59 (
std::vector<
stan::lang::statement>, statements_) )
65 template <
typename Iterator>
66 statement_grammar<Iterator>::statement_grammar(variable_map& var_map,
67 std::stringstream& error_msgs)
68 : statement_grammar::base_type(statement_r),
70 error_msgs_(error_msgs),
71 expression_g(var_map, error_msgs),
72 var_decls_g(var_map, error_msgs),
73 statement_2_g(var_map, error_msgs, *this),
74 indexes_g(var_map, error_msgs, expression_g) {
75 using boost::spirit::qi::_1;
76 using boost::spirit::qi::char_;
77 using boost::spirit::qi::eps;
78 using boost::spirit::qi::lexeme;
79 using boost::spirit::qi::lit;
80 using boost::spirit::qi::no_skip;
81 using boost::spirit::qi::_pass;
82 using boost::spirit::qi::_val;
83 using boost::spirit::qi::raw;
85 using boost::spirit::qi::labels::_a;
86 using boost::spirit::qi::labels::_r1;
87 using boost::spirit::qi::labels::_r2;
88 using boost::spirit::qi::labels::_r3;
90 using boost::phoenix::begin;
91 using boost::phoenix::end;
139 %= (lit(
"increment_log_prob") >> no_skip[!char_(
"a-zA-Z0-9_")])
153 %= (lit(
"target") >> lit(
"+="))
164 = (lit(
"while") >> no_skip[!char_(
"a-zA-Z0-9_")])
177 %= (lit(
"for") >> no_skip[!char_(
"a-zA-Z0-9_")])
191 %= (lit(
"print") >> no_skip[!char_(
"a-zA-Z0-9_")])
199 %= (lit(
"reject") >> no_skip[!char_(
"a-zA-Z0-9_")])
212 > no_skip[*char_(
"a-zA-Z0-9/~!@#$%^&*()`_+-={}|[]:;'<>?,./ ")]
217 %= (lexeme[char_(
"a-zA-Z")
218 >> *char_(
"a-zA-Z0-9_.")]);
220 range_r.name(
"range expression pair, colon");
241 assgn_r.name(
"indexed variable assginment statement");
254 | (lit(
"=") >> no_skip[!char_(
"=")]);
256 var_r.name(
"variable for left-hand side of assignment");
268 var_lhs_r.name(
"variable and array dimensions");
273 opt_dims_r.name(
"array dimensions (optional)");
277 dims_r.name(
"array dimensions");
285 sample_r.name(
"distribution of expression");
318 %= (lit(
"return") >> no_skip[!char_(
"a-zA-Z0-9_")])
boost::phoenix::function< validate_return_allowed > validate_return_allowed_f
boost::spirit::qi::rule< Iterator, increment_log_prob_statement(bool, var_origin), whitespace_grammar< Iterator > > increment_target_statement_r
boost::phoenix::function< add_while_body > add_while_body_f
boost::spirit::qi::rule< Iterator, std::vector< expression >var_origin), whitespace_grammar< Iterator > > dims_r
indexes_grammar< Iterator > indexes_g
boost::phoenix::function< validate_assgn > validate_assgn_f
boost::spirit::qi::rule< Iterator, assignment(var_origin), whitespace_grammar< Iterator > > assignment_r
boost::spirit::qi::rule< Iterator, range(var_origin), whitespace_grammar< Iterator > > range_r
boost::spirit::qi::rule< Iterator, std::vector< var_decl >), whitespace_grammar< Iterator > > local_var_decls_r
void sample(stan::mcmc::base_mcmc *sampler, int num_warmup, int num_samples, int num_thin, int refresh, bool save, stan::services::sample::mcmc_writer< Model, SampleRecorder, DiagnosticRecorder, MessageRecorder > &mcmc_writer, stan::mcmc::sample &init_s, Model &model, RNG &base_rng, const std::string &prefix, const std::string &suffix, std::ostream &o, StartTransitionCallback &callback, interface_callbacks::writer::base_writer &info_writer, interface_callbacks::writer::base_writer &error_writer)
boost::phoenix::function< set_no_op > set_no_op_f
Probability, optimization and sampling library.
boost::phoenix::function< deprecate_increment_log_prob > deprecate_increment_log_prob_f
Template specification of functions in std for Stan.
boost::phoenix::function< validate_int_expression > validate_int_expression_f
boost::spirit::qi::rule< Iterator, variable(var_origin), whitespace_grammar< Iterator > > var_r
boost::spirit::qi::rule< Iterator, printable(var_origin), whitespace_grammar< Iterator > > printable_r
boost::spirit::qi::rule< Iterator, statement(bool, var_origin, bool), whitespace_grammar< Iterator > > statement_r
boost::spirit::qi::rule< Iterator, statement(bool, var_origin, bool), whitespace_grammar< Iterator > > statement_sub_r
boost::spirit::qi::rule< Iterator, boost::spirit::qi::unused_type, whitespace_grammar< Iterator > > assignment_operator_r
boost::phoenix::function< add_loop_identifier > add_loop_identifier_f
expression_grammar< Iterator > expression_g
std::stringstream & error_msgs_
boost::phoenix::function< validate_void_return_allowed > validate_void_return_allowed_f
boost::spirit::qi::rule< Iterator, distribution(var_origin), whitespace_grammar< Iterator > > distribution_r
boost::spirit::qi::rule< Iterator, boost::spirit::qi::locals< std::vector< var_decl > >, statements(bool, var_origin, bool), whitespace_grammar< Iterator > > statement_seq_r
boost::phoenix::function< remove_loop_identifier > remove_loop_identifier_f
boost::spirit::qi::rule< Iterator, no_op_statement(), whitespace_grammar< Iterator > > no_op_statement_r
BOOST_FUSION_ADAPT_STRUCT(stan::lang::expr_type,(stan::lang::base_expr_type, base_type_)(size_t, num_dims_)) namespace stan
boost::spirit::qi::rule< Iterator, range(var_origin), whitespace_grammar< Iterator > > truncation_range_r
boost::phoenix::function< add_line_number > add_line_number_f
boost::spirit::qi::rule< Iterator, print_statement(var_origin), whitespace_grammar< Iterator > > print_statement_r
boost::spirit::qi::rule< Iterator, while_statement(bool, var_origin, bool), whitespace_grammar< Iterator > > while_statement_r
boost::phoenix::function< validate_allow_sample > validate_allow_sample_f
boost::phoenix::function< assign_lhs > assign_lhs_f
boost::phoenix::function< expression_as_statement > expression_as_statement_f
boost::spirit::qi::rule< Iterator, sample(bool, var_origin), whitespace_grammar< Iterator > > sample_r
boost::spirit::qi::rule< Iterator, assgn(var_origin), whitespace_grammar< Iterator > > assgn_r
boost::spirit::qi::rule< Iterator, return_statement(var_origin), whitespace_grammar< Iterator > > return_statement_r
boost::spirit::qi::rule< Iterator, boost::spirit::qi::locals< std::string >, for_statement(bool, var_origin, bool), whitespace_grammar< Iterator > > for_statement_r
boost::spirit::qi::rule< Iterator, expression(var_origin), whitespace_grammar< Iterator > > expression_rhs_r
boost::phoenix::function< validate_int_expr_warn > validate_int_expr_warn_f
boost::spirit::qi::rule< Iterator, reject_statement(var_origin), whitespace_grammar< Iterator > > reject_statement_r
boost::phoenix::function< validate_sample > validate_sample_f
boost::spirit::qi::rule< Iterator, std::string(), whitespace_grammar< Iterator > > identifier_r
boost::phoenix::function< unscope_locals > unscope_locals_f
boost::phoenix::function< identifier_to_var > identifier_to_var_f
boost::spirit::qi::rule< Iterator, std::vector< expression >var_origin), whitespace_grammar< Iterator > > opt_dims_r
boost::phoenix::function< add_while_condition > add_while_condition_f
boost::spirit::qi::rule< Iterator, std::string(), whitespace_grammar< Iterator > > printable_string_r
boost::phoenix::function< validate_assignment > validate_assignment_f
boost::spirit::qi::rule< Iterator, variable_dims(var_origin), whitespace_grammar< Iterator > > var_lhs_r
statement_2_grammar< Iterator > statement_2_g
boost::phoenix::function< set_void_return > set_void_return_f
var_decls_grammar< Iterator > var_decls_g
boost::spirit::qi::rule< Iterator, return_statement(var_origin), whitespace_grammar< Iterator > > void_return_statement_r
boost::phoenix::function< deprecate_old_assignment_op > deprecate_old_assignment_op_f
boost::spirit::qi::rule< Iterator, increment_log_prob_statement(bool, var_origin), whitespace_grammar< Iterator > > increment_log_prob_statement_r
boost::phoenix::function< validate_non_void_expression > validate_non_void_expression_f