summaryrefslogtreecommitdiff
path: root/sys/src/libregexp
diff options
context:
space:
mode:
authorftrvxmtrx <ftrvxmtrx@gmail.com>2016-11-17 23:07:54 +0100
committerftrvxmtrx <ftrvxmtrx@gmail.com>2016-11-17 23:07:54 +0100
commitee9b0eef895209023ab7d7cc1808f33318834999 (patch)
tree39ae64a35ddcf156847fa46b9d5cb23400277e79 /sys/src/libregexp
parented76659c054ce781ae6050e563de9ad40b3d25cd (diff)
libavl, libregexp: put debug functions back
Diffstat (limited to 'sys/src/libregexp')
-rw-r--r--sys/src/libregexp/regcomp.c74
1 files changed, 74 insertions, 0 deletions
diff --git a/sys/src/libregexp/regcomp.c b/sys/src/libregexp/regcomp.c
index 61f9683a6..ad3b8cd96 100644
--- a/sys/src/libregexp/regcomp.c
+++ b/sys/src/libregexp/regcomp.c
@@ -156,6 +156,17 @@ initplex(Parselex *plex, char *regstr, int lit)
return plex;
}
+static int
+maxthreads(Renode *tree)
+{
+ tree = tree->left;
+ if(tree->op == TCAT)
+ tree = tree->left;
+ if(tree->op == TBOL)
+ return 2;
+ return -1;
+}
+
static Reprog*
regcomp1(char *regstr, int nl, int lit)
{
@@ -179,6 +190,7 @@ regcomp1(char *regstr, int nl, int lit)
maxthr = regstrlen;
parsetr = node(&plex, TSUB, e0(&plex), nil);
+// prtree(parsetr, 0, 1);
reprog = malloc(sizeof(Reprog) +
sizeof(Reinst) * plex.instrs +
sizeof(Rethread) * maxthr);
@@ -503,3 +515,65 @@ buildclass(Parselex *l)
}
return n;
}
+
+static void
+prtree(Renode *tree, int d, int f)
+{
+ int i;
+
+ if(tree == nil)
+ return;
+ if(f)
+ for(i = 0; i < d; i++)
+ print("\t");
+ switch(tree->op) {
+ case TCAT:
+ prtree(tree->left, d, 0);
+ prtree(tree->right, d, 1);
+ break;
+ case TOR:
+ print("TOR\n");
+ prtree(tree->left, d+1, 1);
+ for(i = 0; i < d; i++)
+ print("\t");
+ print("|\n");
+ prtree(tree->right, d+1, 1);
+ break;
+ case TSTAR:
+ print("*\n");
+ prtree(tree->left, d+1, 1);
+ break;
+ case TPLUS:
+ print("+\n");
+ prtree(tree->left, d+1, 1);
+ break;
+ case TQUES:
+ print("?\n");
+ prtree(tree->left, d+1, 1);
+ break;
+ case TANY:
+ print(".\n");
+ prtree(tree->left, d+1, 1);
+ break;
+ case TBOL:
+ print("^\n");
+ break;
+ case TEOL:
+ print("$\n");
+ break;
+ case TSUB:
+ print("TSUB\n");
+ prtree(tree->left, d+1, 1);
+ break;
+ case TRUNE:
+ print("TRUNE: %C\n", tree->r);
+ break;
+ case TNOTNL:
+ print("TNOTNL: !\\n\n");
+ break;
+ case TCLASS:
+ print("CLASS: %C-%C\n", tree->r, tree->r1);
+ prtree(tree->left, d, 1);
+ break;
+ }
+}