#ifndef CXX_CODEGEN_HH
#define CXX_CODEGEN_HH
#include "visitor.hh"
#include <iostream>
namespace codegen {
class CXXCodeGen : public ast::Visitor{
protected:
std::ostream &_hh_os;
std::ostream &_cc_os;
const char *_method_name;
public:
CXXCodeGen(std::ostream &hh_os, std::ostream &cc_os,
const char *method_name = "fill_table")
: _hh_os(hh_os), _cc_os(cc_os), _method_name(method_name)
{}
~CXXCodeGen() {}
void print_parameters (std::ostream &os);
void print_globals (std::ostream &os);
void print_locals (std::ostream &os);
void emit_matrix_index (ast::Update &update);
void emit_matrix_index (ast::MatrixExpr &matrix_expr);
virtual void visit (ast::BinRelLT <);
virtual void visit (ast::BinRelLTE <e);
virtual void visit (ast::BinRelGT >);
virtual void visit (ast::BinRelGTE >e);
virtual void visit (ast::BinRelEQ &eq);
virtual void visit (ast::BinRelNEQ &neq);
virtual void visit (ast::RExpr &rexpr);
virtual void visit (ast::Range &range);
virtual void visit (ast::Values &values);
virtual void visit (ast::SimpleFun &simple_fun);
virtual void visit (ast::IDExpr &id_expr);
virtual void visit (ast::IntegerExpr &integer_expr);
virtual void visit (ast::MatrixExpr &matrix_expr);
virtual void visit (ast::FunCallExpr &fun_call_expr);
virtual void visit (ast::BinOpExpr &binop_expr);
virtual void visit (ast::NEGExpr &neg_expr);
virtual void visit (ast::RelBExpr &bexpr);
virtual void visit (ast::ANDBExpr &bexpr);
virtual void visit (ast::ORBExpr &bexpr);
virtual void visit (ast::NOTBExpr &bexpr);
virtual void visit (ast::TrueExpr &bexpr);
virtual void visit (ast::Update &update);
virtual void visit (ast::DProg &dprog);
};
void cxx_emit_code (ast::DProg *dprog, const char *output_name);
};
#endif // CXX_CODEGEN_HH
syntax highlighted by Code2HTML, v. 0.9.1