Stan  2.10.0
probability, sampling & optimization
statement_2_grammar_def.hpp
Go to the documentation of this file.
1 #ifndef STAN_LANG_GRAMMARS_STATEMENT_2_GRAMMAR_DEF_HPP
2 #define STAN_LANG_GRAMMARS_STATEMENT_2_GRAMMAR_DEF_HPP
3 
4 #include <stan/lang/ast.hpp>
9 #include <boost/spirit/include/qi.hpp>
10 #include <boost/spirit/include/phoenix_core.hpp>
11 #include <sstream>
12 
13 namespace stan {
14 
15  namespace lang {
16 
17  template <typename Iterator>
19  std::stringstream& error_msgs,
21  : statement_2_grammar::base_type(statement_2_r),
22  var_map_(var_map),
23  error_msgs_(error_msgs),
24  expression_g(var_map, error_msgs),
25  statement_g(sg) {
26  using boost::spirit::qi::_1;
27  using boost::spirit::qi::char_;
28  using boost::spirit::qi::lit;
29  using boost::spirit::qi::no_skip;
30  using boost::spirit::qi::_pass;
31  using boost::spirit::qi::_val;
32  using boost::spirit::qi::labels::_r1;
33  using boost::spirit::qi::labels::_r2;
34  using boost::spirit::qi::labels::_r3;
35 
36  // _r1 true if sample_r allowed (inherited)
37  // _r2 source of variables allowed for assignments
38  // set to true if sample_r are allowed
39  statement_2_r.name("statement");
40  statement_2_r %= conditional_statement_r(_r1, _r2, _r3);
41 
42  conditional_statement_r.name("if-else statement");
44  = (lit("if") >> no_skip[!char_("a-zA-Z0-9_")])
45  > lit('(')
46  > expression_g(_r2)
47  [add_conditional_condition_f(_val, _1, _pass,
48  boost::phoenix::ref(error_msgs_))]
49  > lit(')')
50  > statement_g(_r1, _r2, _r3)
51  [add_conditional_body_f(_val, _1)]
52  > * (((lit("else") >> no_skip[!char_("a-zA-Z0-9_")])
53  >> (lit("if") >> no_skip[!char_("a-zA-Z0-9_")]))
54  > lit('(')
55  > expression_g(_r2)
56  [add_conditional_condition_f(_val, _1, _pass,
57  boost::phoenix::ref(error_msgs_))]
58  > lit(')')
59  > statement_g(_r1, _r2, _r3)
60  [add_conditional_body_f(_val, _1)])
61  > -((lit("else") >> no_skip[!char_("a-zA-Z0-9_")])
62  > statement_g(_r1, _r2, _r3)
63  [add_conditional_body_f(_val, _1)]);
64  }
65 
66  }
67 }
68 #endif
Probability, optimization and sampling library.
boost::phoenix::function< add_conditional_condition > add_conditional_condition_f
boost::phoenix::function< add_conditional_body > add_conditional_body_f
boost::spirit::qi::rule< Iterator, conditional_statement(bool, var_origin, bool), whitespace_grammar< Iterator > > conditional_statement_r
boost::spirit::qi::rule< Iterator, statement(bool, var_origin, bool), whitespace_grammar< Iterator > > statement_2_r
statement_2_grammar(variable_map &var_map, std::stringstream &error_msgs, statement_grammar< Iterator > &sg)
statement_grammar< Iterator > & statement_g
expression_grammar< Iterator > expression_g

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