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::
string, generate_) )
47 (
std::vector<
stan::lang::printable>, printables_) )
50 (
std::vector<
stan::lang::printable>, printables_) )
53 (
stan::lang::expression, log_prob_) )
56 (
stan::lang::expression, expr_)
57 (
stan::lang::distribution, dist_)
58 (
stan::lang::range, truncation_) )
61 (
std::vector<
stan::lang::var_decl>, local_decl_)
62 (
std::vector<
stan::lang::statement>, statements_) )
68 template <
typename Iterator>
69 statement_grammar<Iterator>::statement_grammar(variable_map& var_map,
70 std::stringstream& error_msgs)
71 : statement_grammar::base_type(statement_r),
73 error_msgs_(error_msgs),
74 expression_g(var_map, error_msgs),
75 var_decls_g(var_map, error_msgs),
76 statement_2_g(var_map, error_msgs, *this),
77 indexes_g(var_map, error_msgs, expression_g) {
78 using boost::spirit::qi::_1;
79 using boost::spirit::qi::char_;
80 using boost::spirit::qi::eps;
81 using boost::spirit::qi::lexeme;
82 using boost::spirit::qi::lit;
83 using boost::spirit::qi::no_skip;
84 using boost::spirit::qi::string;
85 using boost::spirit::qi::_pass;
86 using boost::spirit::qi::_val;
87 using boost::spirit::qi::raw;
89 using boost::spirit::qi::labels::_a;
90 using boost::spirit::qi::labels::_r1;
91 using boost::spirit::qi::labels::_r2;
92 using boost::spirit::qi::labels::_r3;
93 using boost::spirit::qi::labels::_r4;
95 using boost::phoenix::begin;
96 using boost::phoenix::end;
146 %= (lit(
"increment_log_prob") >> no_skip[!char_(
"a-zA-Z0-9_")])
160 %= (lit(
"target") >> lit(
"+="))
171 = (lit(
"while") >> no_skip[!char_(
"a-zA-Z0-9_")])
183 %= (string(
"break") | string(
"continue"))
190 %= (lit(
"for") >> no_skip[!char_(
"a-zA-Z0-9_")])
204 %= (lit(
"print") >> no_skip[!char_(
"a-zA-Z0-9_")])
212 %= (lit(
"reject") >> no_skip[!char_(
"a-zA-Z0-9_")])
226 > no_skip[*char_(
"a-zA-Z0-9/~!@#$%^&*()`_+-={}|[]:;'<>?,./ ")]
231 %= (lexeme[char_(
"a-zA-Z")
232 >> *char_(
"a-zA-Z0-9_.")]);
234 range_r.name(
"range expression pair, colon");
255 assgn_r.name(
"indexed variable assginment statement");
268 | (lit(
"=") >> no_skip[!char_(
"=")]);
270 var_r.name(
"variable for left-hand side of assignment");
282 var_lhs_r.name(
"variable and array dimensions");
287 opt_dims_r.name(
"array dimensions (optional)");
291 dims_r.name(
"array dimensions");
299 sample_r.name(
"distribution of expression");
332 %= (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
AST node for assignment to variable with multi-indexing.
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::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, boost::spirit::qi::unused_type, whitespace_grammar< Iterator > > assignment_operator_r
boost::phoenix::function< add_loop_identifier > add_loop_identifier_f
boost::spirit::qi::rule< Iterator, statement(bool, var_origin, bool, bool), whitespace_grammar< Iterator > > statement_r
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, break_continue_statement(bool), whitespace_grammar< Iterator > > break_continue_statement_r
boost::phoenix::function< non_void_expression > non_void_expression_f
boost::spirit::qi::rule< Iterator, distribution(var_origin), whitespace_grammar< Iterator > > distribution_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::phoenix::function< validate_int_expr > validate_int_expr_f
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::phoenix::function< validate_int_expr_silent > validate_int_expr_silent_f
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::vector< var_decl > >, statements(bool, var_origin, bool, bool), whitespace_grammar< Iterator > > statement_seq_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::spirit::qi::rule< Iterator, reject_statement(var_origin), whitespace_grammar< Iterator > > reject_statement_r
boost::phoenix::function< validate_sample > validate_sample_f
Structure to hold a variable.
boost::spirit::qi::rule< Iterator, std::string(), whitespace_grammar< Iterator > > identifier_r
const int local_origin
The origin of the variable is as a local variable.
boost::phoenix::function< unscope_locals > unscope_locals_f
boost::phoenix::function< identifier_to_var > identifier_to_var_f
boost::phoenix::function< validate_in_loop > validate_in_loop_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::spirit::qi::rule< Iterator, statement(bool, var_origin, bool, bool), whitespace_grammar< Iterator > > statement_sub_r
boost::phoenix::function< validate_non_void_expression > validate_non_void_expression_f