Stan  2.10.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::_1;
29  using boost::spirit::qi::lit;
30  using boost::spirit::qi::_pass;
31  using boost::spirit::qi::_val;
32  using boost::spirit::qi::labels::_r1;
33 
34  expression_r.name("expression");
35  expression_r
36  %= conditional_op_r(_r1)
37  | expression15_r(_r1);
38 
39 
40  conditional_op_r.name("conditional op expression, cond ? t_val : f_val ");
41  conditional_op_r
42  %= expression15_r(_r1)
43  >> lit("?")
44  >> expression_r(_r1)
45  >> lit(":")
46  >> expression_r(_r1)[validate_conditional_op_f(_val, _pass,
47  boost::phoenix::ref(error_msgs))];
48 
49  expression15_r.name("expression");
50  expression15_r
51  = expression14_r(_r1)[assign_lhs_f(_val, _1)]
52  > *(lit("||")
53  > expression14_r(_r1)
54  [binary_op_f(_val, _1, "||", "logical_or",
55  boost::phoenix::ref(error_msgs))]);
56 
57  expression14_r.name("expression");
58  expression14_r
59  = expression10_r(_r1)[assign_lhs_f(_val, _1)]
60  > *(lit("&&")
61  > expression10_r(_r1)
62  [binary_op_f(_val, _1, "&&", "logical_and",
63  boost::phoenix::ref(error_msgs))]);
64 
65  expression10_r.name("expression");
66  expression10_r
67  = expression09_r(_r1)[assign_lhs_f(_val, _1)]
68  > *((lit("==")
69  > expression09_r(_r1)
70  [binary_op_f(_val, _1, "==", "logical_eq",
71  boost::phoenix::ref(error_msgs))])
72  |
73  (lit("!=")
74  > expression09_r(_r1)
75  [binary_op_f(_val, _1, "!=", "logical_neq",
76  boost::phoenix::ref(error_msgs))]));
77 
78  expression09_r.name("expression");
79  expression09_r
80  = expression07_g(_r1)[assign_lhs_f(_val, _1)]
81  > *((lit("<=")
82  > expression07_g(_r1)
83  [binary_op_f(_val, _1, "<", "logical_lte",
84  boost::phoenix::ref(error_msgs))])
85  | (lit("<")
86  > expression07_g(_r1)
87  [binary_op_f(_val, _1, "<=", "logical_lt",
88  boost::phoenix::ref(error_msgs))])
89  | (lit(">=")
90  > expression07_g(_r1)
91  [binary_op_f(_val, _1, ">", "logical_gte",
92  boost::phoenix::ref(error_msgs))])
93  | (lit(">")
94  > expression07_g(_r1)
95  [binary_op_f(_val, _1, ">=", "logical_gt",
96  boost::phoenix::ref(error_msgs))]));
97  }
98  }
99 }
100 #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

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