Stan  2.14.0
probability, sampling & optimization
expression_grammar_def.hpp
Go to the documentation of this file.
1 #ifndef STAN_LANG_GRAMMARS_EXPRESSION_GRAMMAR_DEF_HPP
2 #define STAN_LANG_GRAMMARS_EXPRESSION_GRAMMAR_DEF_HPP
3 
5 #include <boost/spirit/include/qi.hpp>
6 #include <boost/spirit/include/phoenix_core.hpp>
7 #include <sstream>
8 #include <string>
9 #include <vector>
10 
12  (stan::lang::expression, cond_)
13  (stan::lang::expression, true_val_)
14  (stan::lang::expression, false_val_) )
15 
16 
17 namespace stan {
18 
19  namespace lang {
20 
21  template <typename Iterator>
22  expression_grammar<Iterator>::expression_grammar(variable_map& var_map,
23  std::stringstream& error_msgs)
24  : expression_grammar::base_type(expression_r),
25  var_map_(var_map),
26  error_msgs_(error_msgs),
27  expression07_g(var_map, error_msgs, *this) {
28  using boost::spirit::qi::char_;
29  using boost::spirit::qi::eps;
30  using boost::spirit::qi::lit;
31  using boost::spirit::qi::no_skip;
32  using boost::spirit::qi::_1;
33  using boost::spirit::qi::_pass;
34  using boost::spirit::qi::_val;
35  using boost::spirit::qi::labels::_r1;
36 
37  expression_r.name("expression");
38  expression_r
39  %= (expression15_r(_r1) >> no_skip[!char_('?')] > eps)
40  | conditional_op_r(_r1);
41 
42  conditional_op_r.name("conditional op expression, cond ? t_val : f_val ");
43  conditional_op_r
44  %= expression15_r(_r1)
45  >> lit("?")
46  >> expression_r(_r1)
47  >> lit(":")
48  >> expression_r(_r1)[validate_conditional_op_f(_val, _r1, _pass,
49  boost::phoenix::ref(var_map_),
50  boost::phoenix::ref(error_msgs))];
51 
52  expression15_r.name("expression");
53  expression15_r
54  = expression14_r(_r1)[assign_lhs_f(_val, _1)]
55  > *(lit("||")
56  > expression14_r(_r1)
57  [binary_op_f(_val, _1, "||", "logical_or",
58  boost::phoenix::ref(error_msgs))]);
59 
60  expression14_r.name("expression");
61  expression14_r
62  = expression10_r(_r1)[assign_lhs_f(_val, _1)]
63  > *(lit("&&")
64  > expression10_r(_r1)
65  [binary_op_f(_val, _1, "&&", "logical_and",
66  boost::phoenix::ref(error_msgs))]);
67 
68  expression10_r.name("expression");
69  expression10_r
70  = expression09_r(_r1)[assign_lhs_f(_val, _1)]
71  > *((lit("==")
72  > expression09_r(_r1)
73  [binary_op_f(_val, _1, "==", "logical_eq",
74  boost::phoenix::ref(error_msgs))])
75  |
76  (lit("!=")
77  > expression09_r(_r1)
78  [binary_op_f(_val, _1, "!=", "logical_neq",
79  boost::phoenix::ref(error_msgs))]));
80 
81  expression09_r.name("expression");
82  expression09_r
83  = expression07_g(_r1)[assign_lhs_f(_val, _1)]
84  > *((lit("<=")
85  > expression07_g(_r1)
86  [binary_op_f(_val, _1, "<", "logical_lte",
87  boost::phoenix::ref(error_msgs))])
88  | (lit("<")
89  > expression07_g(_r1)
90  [binary_op_f(_val, _1, "<=", "logical_lt",
91  boost::phoenix::ref(error_msgs))])
92  | (lit(">=")
93  > expression07_g(_r1)
94  [binary_op_f(_val, _1, ">", "logical_gte",
95  boost::phoenix::ref(error_msgs))])
96  | (lit(">")
97  > expression07_g(_r1)
98  [binary_op_f(_val, _1, ">=", "logical_gt",
99  boost::phoenix::ref(error_msgs))]));
100  }
101  }
102 }
103 #endif
boost::phoenix::function< binary_op_expr > binary_op_f
boost::phoenix::function< validate_conditional_op > validate_conditional_op_f
Probability, optimization and sampling library.
BOOST_FUSION_ADAPT_STRUCT(stan::lang::conditional_op,(stan::lang::expression, cond_)(stan::lang::expression, true_val_)(stan::lang::expression, false_val_)) namespace stan
boost::phoenix::function< assign_lhs > assign_lhs_f
Structure for the conditional operator.

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