Stan  2.14.0
probability, sampling & optimization
indexes_grammar_def.hpp
Go to the documentation of this file.
1 #ifndef STAN_LANG_GRAMMARS_INDEXES_GRAMMAR_DEF_HPP
2 #define STAN_LANG_GRAMMARS_INDEXES_GRAMMAR_DEF_HPP
3 
4 #include <stan/lang/ast.hpp>
8 #include <boost/spirit/include/qi.hpp>
9 #include <boost/spirit/include/phoenix_core.hpp>
10 
12  (stan::lang::expression, idx_) )
13 
14 BOOST_FUSION_ADAPT_STRUCT(stan::lang::multi_idx,
15  (stan::lang::expression, idxs_) )
16 
17 BOOST_FUSION_ADAPT_STRUCT(stan::lang::lb_idx,
18  (stan::lang::expression, lb_) )
19 
20 BOOST_FUSION_ADAPT_STRUCT(stan::lang::ub_idx,
21  (stan::lang::expression, ub_) )
22 
23 BOOST_FUSION_ADAPT_STRUCT(stan::lang::lub_idx,
24  (stan::lang::expression, lb_)
25  (stan::lang::expression, ub_) )
26 
27 namespace stan {
28 
29  namespace lang {
30 
31  template <typename Iterator>
32  indexes_grammar<Iterator>::indexes_grammar(variable_map& var_map,
33  std::stringstream& error_msgs,
34  expression_grammar<Iterator>& eg)
35  : indexes_grammar::base_type(indexes_r),
36  var_map_(var_map),
37  error_msgs_(error_msgs),
38  expression_g(eg) {
39  using boost::spirit::qi::eps;
40  using boost::spirit::qi::lit;
41  using boost::spirit::qi::_val;
42  using boost::spirit::qi::_r1;
43  using boost::spirit::qi::_1;
44  using boost::spirit::qi::_pass;
45 
46  indexes_r.name("indexes (zero or more)");
47  indexes_r
48  %= lit("[")
49  >> (index_r(_r1) % ',')
51 
52  close_indexes_r.name("one or more container indexes followed by ']'");
53  close_indexes_r %= lit(']');
54 
55  index_r.name("index expression, one of: "
56  " int, int[], int:, :int, int:int, :)");
57  index_r
58  %= lub_index_r(_r1)
59  | lb_index_r(_r1)
60  | uni_index_r(_r1)
61  | multi_index_r(_r1)
62  | ub_index_r(_r1)
63  | omni_index_r(_r1);
64 
65  lub_index_r.name("index expression, one of: "
66  " int, int[], int:, :int, int:int, :)");
68  %= int_expression_r(_r1)
69  >> lit(":")
70  >> int_expression_r(_r1)
71  > eps;
72 
73  lb_index_r.name("index expression, one of: "
74  " int, int[], int:, :int, int:int, :)");
76  %= int_expression_r(_r1)
77  >> lit(":")
78  > eps;
79 
80  uni_index_r.name("index expression, one of: "
81  " int, int[], int:, :int, int:int, :)");
83  %= int_expression_r(_r1);
84 
85  multi_index_r.name("index expression, one of: "
86  " int, int[], int:, :int, int:int, :)");
88  %= expression_g(_r1)
89  [validate_ints_expression_f(_1, _pass,
90  boost::phoenix::ref(error_msgs_))]
91  > eps;
92 
93  ub_index_r.name("index expression, one of: "
94  " int, int[], int:, :int, int:int, :)");
96  %= lit(":")
97  >> int_expression_r(_r1)
98  > eps;
99 
100  omni_index_r.name("index expression, one of: "
101  " int, int[], int:, :int, int:int, :)");
103  = lit(":")[set_omni_idx_f(_val)]
104  | eps[set_omni_idx_f(_val)];
105 
106  int_expression_r.name("integer expression");
108  %= expression_g(_r1)[validate_int_expr_silent_f(_1, _pass)];
109  }
110 
111  }
112 }
113 #endif
boost::spirit::qi::rule< Iterator, multi_idx(var_origin), whitespace_grammar< Iterator > > multi_index_r
AST structure to hold a single array or matrix/vector index.
Definition: uni_idx.hpp:12
std::stringstream & error_msgs_
Probability, optimization and sampling library.
boost::spirit::qi::rule< Iterator, ub_idx(var_origin), whitespace_grammar< Iterator > > ub_index_r
boost::spirit::qi::rule< Iterator, lub_idx(var_origin), whitespace_grammar< Iterator > > lub_index_r
boost::spirit::qi::rule< Iterator, uni_idx(var_origin), whitespace_grammar< Iterator > > uni_index_r
boost::spirit::qi::rule< Iterator, boost::spirit::qi::unused_type, whitespace_grammar< Iterator > > close_indexes_r
boost::phoenix::function< validate_ints_expression > validate_ints_expression_f
boost::spirit::qi::rule< Iterator, omni_idx(var_origin), whitespace_grammar< Iterator > > omni_index_r
BOOST_FUSION_ADAPT_STRUCT(stan::lang::expr_type,(stan::lang::base_expr_type, base_type_)(size_t, num_dims_)) namespace stan
expression_grammar< Iterator > & expression_g
boost::spirit::qi::rule< Iterator, idx(var_origin), whitespace_grammar< Iterator > > index_r
boost::phoenix::function< validate_int_expr_silent > validate_int_expr_silent_f
boost::phoenix::function< set_omni_idx > set_omni_idx_f
boost::spirit::qi::rule< Iterator, lb_idx(var_origin), whitespace_grammar< Iterator > > lb_index_r
boost::spirit::qi::rule< Iterator, expression(var_origin), whitespace_grammar< Iterator > > int_expression_r
boost::spirit::qi::rule< Iterator, std::vector< idx >var_origin), whitespace_grammar< Iterator > > indexes_r

     [ Stan Home Page ] © 2011–2016, Stan Development Team.