]> granicus.if.org Git - re2c/commitdiff
add code to dump a compiled regex
authornuno-lopes <nuno-lopes@642ea486-5414-0410-9d7f-a0204ed87703>
Thu, 8 Jan 2009 16:34:51 +0000 (16:34 +0000)
committernuno-lopes <nuno-lopes@642ea486-5414-0410-9d7f-a0204ed87703>
Thu, 8 Jan 2009 16:34:51 +0000 (16:34 +0000)
re2c/actions.cc

index 2621f653e8f7444730b444369ddc20b914977778..8f7c2dc8df02f1b7706ed9749bb83e6e19abfa36 100644 (file)
@@ -37,11 +37,13 @@ Symbol *Symbol::find(const SubStr &str)
        return (*it).second;
 }
 
-void showIns(std::ostream &o, const Ins &i, const Ins &base)
+const Ins* showIns(std::ostream &o, const Ins &i, const Ins &base)
 {
        o.width(3);
        o << &i - &base << ": ";
 
+       const Ins *ret = &(&i)[1];
+
        switch (i.i.tag)
        {
 
@@ -49,8 +51,8 @@ void showIns(std::ostream &o, const Ins &i, const Ins &base)
                {
                        o << "match ";
 
-                       for (const Ins *j = &(&i)[1]; j < (Ins*) i.i.link; ++j)
-                               prtCh(o, j->c.value);
+                       for (; ret < (Ins*) i.i.link; ++ret)
+                               prtCh(o, ret->c.value);
 
                        break;
                }
@@ -73,6 +75,7 @@ void showIns(std::ostream &o, const Ins &i, const Ins &base)
        }
 
        o << "\n";
+       return ret;
 }
 
 uint RegExp::fixedLength()
@@ -1048,6 +1051,12 @@ DFA* genCode(RegExp *re)
 
        optimize(ins);
 
+       /*
+       for (const Ins *inst = &ins[0]; inst < &ins[re->size]; ) {
+               inst = showIns(std::cout, *inst, ins[0]);
+       }
+       */
+
        for (j = 0; j < re->size;)
        {
                unmark(&ins[j]);