#include "visitor.hh" #include "range_checking.hh" using namespace ast; namespace range_checking { class RangeCheckVisitor : public Visitor { public: virtual void visit (RExpr &rexpr); }; }; using namespace range_checking; void RangeCheckVisitor::visit (RExpr &rexpr) { if (rexpr.begin_br()->is_less() && rexpr.end_br()->is_less()) return; if (rexpr.begin_br()->is_greater() && rexpr.end_br()->is_greater()) return; throw new RangeError(rexpr); } void RangeError::print_error_msg (std::ostream &os) { os << "Invalid range expression." << std::endl; } void range_checking::check(DProg *dprog) { RangeCheckVisitor rcheck; dprog->accept_top_down(rcheck); }