1 #ifndef __STAN__GM__AST_HPP__
2 #define __STAN__GM__AST_HPP__
4 #include <boost/variant/apply_visitor.hpp>
5 #include <boost/variant/recursive_variant.hpp>
97 void add(
const std::string& name,
99 const std::vector<expr_type>& arg_types);
100 void add(
const std::string& name,
102 void add(
const std::string& name,
105 void add(
const std::string& name,
109 void add(
const std::string& name,
114 void add(
const std::string& name,
120 void add(
const std::string& name,
128 void add_unary(const::std::string& name);
133 const std::vector<expr_type>& sig_args);
135 const std::vector<expr_type>& args,
136 std::ostream& error_msgs);
140 std::map<std::string, std::vector<function_signature_t> > sigs_map_;
148 statements(
const std::vector<var_decl>& local_decl,
149 const std::vector<statement>& stmts);
173 typedef boost::variant<boost::recursive_wrapper<nil>,
174 boost::recursive_wrapper<int_literal>,
175 boost::recursive_wrapper<double_literal>,
176 boost::recursive_wrapper<variable>,
177 boost::recursive_wrapper<fun>,
178 boost::recursive_wrapper<index_op>,
179 boost::recursive_wrapper<binary_op>,
180 boost::recursive_wrapper<unary_op> >
210 typedef boost::variant<boost::recursive_wrapper<std::string>,
211 boost::recursive_wrapper<expression> >
244 std::vector<expression>
const& dims);
280 fun(std::string
const& name,
281 std::vector<expression>
const& args);
285 size_t total_dims(
const std::vector<std::vector<expression> >& dimss);
288 size_t num_expr_dims,
289 size_t num_index_dims);
292 size_t num_index_dims);
297 std::vector<std::vector<expression> >
dimss_;
302 const std::vector<std::vector<expression> >& dimss);
387 const std::vector<expression>& dims,
392 typedef std::pair<base_var_decl,var_origin>
range_t;
393 std::map<std::string, range_t>
map_;
394 bool exists(
const std::string& name)
const;
399 void add(
const std::string& name,
402 void remove(
const std::string& name);
409 std::string
const& name,
410 std::vector<expression>
const& dims);
418 std::string
const& name,
419 std::vector<expression>
const& dims);
426 std::string
const& name,
427 std::vector<expression>
const& dims);
434 std::string
const& name,
435 std::vector<expression>
const& dims);
442 std::string
const& name,
443 std::vector<expression>
const& dims);
452 std::string
const& name,
453 std::vector<expression>
const& dims);
462 std::string
const& name,
463 std::vector<expression>
const& dims);
474 std::string
const& name,
475 std::vector<expression>
const& dims);
486 std::string
const& name,
487 std::vector<expression>
const& dims);
496 std::string
const& name,
497 std::vector<expression>
const& dims);
502 struct name_vis :
public boost::static_visitor<std::string> {
521 typedef boost::variant<boost::recursive_wrapper<nil>,
522 boost::recursive_wrapper<int_var_decl>,
523 boost::recursive_wrapper<double_var_decl>,
524 boost::recursive_wrapper<vector_var_decl>,
525 boost::recursive_wrapper<row_vector_var_decl>,
526 boost::recursive_wrapper<matrix_var_decl>,
527 boost::recursive_wrapper<simplex_var_decl>,
528 boost::recursive_wrapper<ordered_var_decl>,
529 boost::recursive_wrapper<positive_ordered_var_decl>,
530 boost::recursive_wrapper<cov_matrix_var_decl>,
531 boost::recursive_wrapper<corr_matrix_var_decl> >
553 std::string
name()
const;
557 typedef boost::variant<boost::recursive_wrapper<nil>,
558 boost::recursive_wrapper<assignment>,
559 boost::recursive_wrapper<sample>,
560 boost::recursive_wrapper<statements>,
561 boost::recursive_wrapper<for_statement>,
562 boost::recursive_wrapper<print_statement>,
563 boost::recursive_wrapper<no_op_statement> >
609 std::pair<std::vector<var_decl>,std::vector<statement> >
612 std::pair<std::vector<var_decl>,std::vector<statement> >
617 program(
const std::vector<var_decl>& data_decl,
618 const std::pair<std::vector<var_decl>,
619 std::vector<statement> >& derived_data_decl,
620 const std::vector<var_decl>& parameter_decl,
621 const std::pair<std::vector<var_decl>,
622 std::vector<statement> >& derived_decl,
624 const std::pair<std::vector<var_decl>,
625 std::vector<statement> >& generated_decl);