1 #ifndef __STAN__GM__AST_HPP__
2 #define __STAN__GM__AST_HPP__
7 #include <boost/variant/recursive_variant.hpp>
93 void add(
const std::string& name,
95 const std::vector<expr_type>& arg_types);
96 void add(
const std::string& name,
98 void add(
const std::string& name,
101 void add(
const std::string& name,
105 void add(
const std::string& name,
110 void add(
const std::string& name,
116 void add(
const std::string& name,
124 void add_unary(const::std::string& name);
129 const std::vector<expr_type>& sig_args);
131 const std::vector<expr_type>& args,
132 std::ostream& error_msgs);
136 std::map<std::string, std::vector<function_signature_t> > sigs_map_;
144 statements(
const std::vector<var_decl>& local_decl,
145 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<array_literal>,
177 boost::recursive_wrapper<variable>,
178 boost::recursive_wrapper<fun>,
179 boost::recursive_wrapper<index_op>,
180 boost::recursive_wrapper<binary_op>,
181 boost::recursive_wrapper<unary_op> >
224 typedef boost::variant<boost::recursive_wrapper<std::string>,
225 boost::recursive_wrapper<expression> >
259 std::vector<expression>
const&
dims);
303 fun(std::string
const& name,
304 std::vector<expression>
const& args);
308 size_t total_dims(
const std::vector<std::vector<expression> >& dimss);
311 size_t num_expr_dims,
312 size_t num_index_dims);
315 size_t num_index_dims);
320 std::vector<std::vector<expression> >
dimss_;
325 const std::vector<std::vector<expression> >& dimss);
337 const std::string&
op,
378 const std::vector<expression>&
dims,
383 typedef std::pair<base_var_decl,var_origin>
range_t;
384 std::map<std::string, range_t>
map_;
385 bool exists(
const std::string& name)
const;
390 void add(
const std::string& name,
393 void remove(
const std::string& name);
400 std::string
const& name,
401 std::vector<expression>
const&
dims);
409 std::string
const& name,
410 std::vector<expression>
const&
dims);
417 std::string
const& name,
418 std::vector<expression>
const&
dims);
425 std::string
const& name,
426 std::vector<expression>
const&
dims);
433 std::string
const& name,
434 std::vector<expression>
const&
dims);
441 std::string
const& name,
442 std::vector<expression>
const&
dims);
451 std::string
const& name,
452 std::vector<expression>
const&
dims);
461 std::string
const& name,
462 std::vector<expression>
const&
dims);
473 std::string
const& name,
474 std::vector<expression>
const&
dims);
485 std::string
const& name,
486 std::vector<expression>
const&
dims);
495 std::string
const& name,
496 std::vector<expression>
const&
dims);
501 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<unit_vector_var_decl>,
529 boost::recursive_wrapper<ordered_var_decl>,
530 boost::recursive_wrapper<positive_ordered_var_decl>,
531 boost::recursive_wrapper<cov_matrix_var_decl>,
532 boost::recursive_wrapper<corr_matrix_var_decl> >
555 std::string
name()
const;
559 typedef boost::variant<boost::recursive_wrapper<nil>,
560 boost::recursive_wrapper<assignment>,
561 boost::recursive_wrapper<sample>,
562 boost::recursive_wrapper<statements>,
563 boost::recursive_wrapper<for_statement>,
564 boost::recursive_wrapper<conditional_statement>,
565 boost::recursive_wrapper<while_statement>,
566 boost::recursive_wrapper<print_statement>,
567 boost::recursive_wrapper<no_op_statement> >
631 std::pair<std::vector<var_decl>,std::vector<statement> >
634 std::pair<std::vector<var_decl>,std::vector<statement> >
639 program(
const std::vector<var_decl>& data_decl,
640 const std::pair<std::vector<var_decl>,
641 std::vector<statement> >& derived_data_decl,
642 const std::vector<var_decl>& parameter_decl,
643 const std::pair<std::vector<var_decl>,
644 std::vector<statement> >& derived_decl,
646 const std::pair<std::vector<var_decl>,
647 std::vector<statement> >& generated_decl);