Stan  2.10.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) % ',')
50  > lit("]");
51 
52  index_r.name("index expression, one of: "
53  " int, int[], int:, :int, int:int, :)");
54  index_r
55  %= lub_index_r(_r1)
56  | lb_index_r(_r1)
57  | uni_index_r(_r1)
58  | multi_index_r(_r1)
59  | ub_index_r(_r1)
60  | omni_index_r(_r1);
61 
62  lub_index_r.name("index expression, one of: "
63  " int, int[], int:, :int, int:int, :)");
65  %= int_expression_r(_r1)
66  >> lit(":")
67  >> int_expression_r(_r1)
68  > eps;
69 
70  lb_index_r.name("index expression, one of: "
71  " int, int[], int:, :int, int:int, :)");
73  %= int_expression_r(_r1)
74  >> lit(":")
75  > eps;
76 
77  uni_index_r.name("index expression, one of: "
78  " int, int[], int:, :int, int:int, :)");
80  %= int_expression_r(_r1);
81 
82  multi_index_r.name("index expression, one of: "
83  " int, int[], int:, :int, int:int, :)");
85  %= expression_g(_r1)
86  [validate_ints_expression_f(_1, _pass,
87  boost::phoenix::ref(error_msgs_))]
88  > eps;
89 
90  ub_index_r.name("index expression, one of: "
91  " int, int[], int:, :int, int:int, :)");
93  %= lit(":")
94  >> int_expression_r(_r1)
95  > eps;
96 
97  omni_index_r.name("index expression, one of: "
98  " int, int[], int:, :int, int:int, :)");
100  = lit(":")[set_omni_idx_f(_val)]
101  | eps[set_omni_idx_f(_val)];
102 
103  int_expression_r.name("integer expression");
105  %= expression_g(_r1)[validate_int_expression_f(_1, _pass)];
106  }
107 
108  }
109 }
110 #endif
boost::spirit::qi::rule< Iterator, multi_idx(var_origin), whitespace_grammar< Iterator > > multi_index_r
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::phoenix::function< validate_int_expression > validate_int_expression_f
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< 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.