summaryrefslogtreecommitdiff
path: root/src/piraha/Multi.cc
diff options
context:
space:
mode:
authorsbrandt <sbrandt@17b73243-c579-4c4c-a9d2-2d5706c11dac>2013-04-03 19:12:46 +0000
committersbrandt <sbrandt@17b73243-c579-4c4c-a9d2-2d5706c11dac>2013-04-03 19:12:46 +0000
commita3cb4c5d02f0ee75094fc27814c71f8a025d034b (patch)
tree1dd1af38bf8ad0318f07dd2c8ae00216e942efb0 /src/piraha/Multi.cc
parent069e8f1d570cc373c843673be0acf7bc4dd10b6e (diff)
Add the basic grammar files, and the changes
to the piraha code necessary to parse all of Cactus. git-svn-id: http://svn.cactuscode.org/flesh/trunk@4990 17b73243-c579-4c4c-a9d2-2d5706c11dac
Diffstat (limited to 'src/piraha/Multi.cc')
-rw-r--r--src/piraha/Multi.cc21
1 files changed, 6 insertions, 15 deletions
diff --git a/src/piraha/Multi.cc b/src/piraha/Multi.cc
index d0733618..ff03f7d9 100644
--- a/src/piraha/Multi.cc
+++ b/src/piraha/Multi.cc
@@ -4,24 +4,15 @@
using namespace piraha;
bool Multi::match(Matcher *m) {
- unsigned int save;
- int iter = 0;
vector<smart_ptr<Group> > chSave;
- while(true) {
- save = m->pos;
+ for(int i=0;i<maxv;i++) {
+ int save = m->pos;
chSave = m->children;
- if(!pattern->match(m)) {
- m->children = chSave;
+ if(!pattern->match(m) || m->pos == save) {
m->pos = save;
- break;
- }
- if(save - m->pos == 0) {
- std::cout << "ZERO ADVANCE IN MULTI!" << std::endl;
- return minv <= iter && iter <= maxv;
+ m->children = chSave;
+ return i >= minv;
}
- iter++;
- if(iter == maxv)
- break;
}
- return minv <= iter && iter <= maxv;
+ return true;
}