#ifndef PRETTY_PRINTER_HH
#define PRETTY_PRINTER_HH

#include "visitor.hh"

#include <iostream>

class PrettyPrinter : public ast::Visitor{
    std::ostream &_os;

public:
    PrettyPrinter(std::ostream &os = std::cout) : _os(os) {};

    virtual void visit (ast::BinRelLT    &lt);
    virtual void visit (ast::BinRelLTE   &lte);
    virtual void visit (ast::BinRelGT    &gt);
    virtual void visit (ast::BinRelGTE   &gte);
    virtual void visit (ast::BinRelEQ    &eq);
    virtual void visit (ast::BinRelNEQ   &neq);

    virtual void visit (ast::RExpr       &rexpr);
    virtual void visit (ast::WhereExpr   &where_expr);
    virtual void visit (ast::WhenExpr    &when_expr);

    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::ValDeclaration    &val_decl);
    virtual void visit (ast::FunDeclaration    &fun_decl);
    virtual void visit (ast::MatrixDeclaration &matrix_decl);

    virtual void visit (ast::DProg       &dprog);
};

#endif // PRETTY_PRINTER_HH


syntax highlighted by Code2HTML, v. 0.9.1