#include #include #include "Piraha.hpp" using namespace cctki_piraha; Or::Or(Pattern *p,...) : patterns() { va_list ap; va_start(ap,p); patterns.push_back(p); while(true) { Pattern *pat = va_arg(ap,Pattern*); if(pat == NULL) break; //std::cout << "pat=" << pat->fmt() << std::endl; patterns.push_back(pat); assert(patterns.size()<7); } va_end(ap); } bool Or::match(Matcher *m) { typedef vector >::iterator pattern_iter; int save = m->pos; vector > chSave; chSave = m->children; for(pattern_iter p = patterns.begin();p != patterns.end();++p) { m->pos = save; m->children = chSave; if((*p)->match(m)) return true; } return false; }