# HG changeset patch # User Masataka Kohagura # Date 1445588454 -32400 # Node ID 50a146c05192bd2679574b09032db51e40021bc5 # Parent 7809fb223dc9f4a3e1c2a215cf67e4c4d057580e add NodeNumber in Regex Parser tree diff -r 7809fb223dc9 -r 50a146c05192 c/regexParser/createRegexTree.cc --- a/c/regexParser/createRegexTree.cc Fri Oct 23 15:38:49 2015 +0900 +++ b/c/regexParser/createRegexTree.cc Fri Oct 23 17:20:54 2015 +0900 @@ -1,7 +1,8 @@ #include +#include #include "regexParser.h" -NodePtr createNode(unsigned char,NodePtr,NodePtr); +NodePtr createNode(RegexInfoPtr,unsigned char,NodePtr,NodePtr); NodePtr charClass(RegexInfoPtr); NodePtr group(RegexInfoPtr); void token(RegexInfoPtr); @@ -14,12 +15,20 @@ * regexPosition(state) * stateTransitionTable */ -NodePtr createNode(unsigned char character, NodePtr left, NodePtr right) { +NodePtr createNode(RegexInfoPtr ri,unsigned char character, NodePtr left, NodePtr right) { NodePtr n = (NodePtr)malloc(sizeof(Node)); + n->tokenType = ri->tokenType; n->self = n; n->Value.character = character; n->left = left; n->right = right; + + if (ri->tokenType == 'a') { + static int number = 1; + n->nodeNumber = number; + number++; + ri->tokenType = 0; + } return n; } @@ -39,7 +48,7 @@ // ::= [a-z][A-Z][0-9] NodePtr literal(RegexInfoPtr ri) { unsigned char *top = ri->ptr; - NodePtr n = createNode(ri->ptr[0],0,0); + NodePtr n = createNode(ri,ri->ptr[0],0,0); ri->ptr++; return n; } @@ -99,7 +108,6 @@ return; } } - ri->tokenType = 0; ri->tokenValue = 0; return; @@ -123,15 +131,15 @@ while (ri->ptr[0]) { token(ri); if (ri->tokenType == '*') { - n = createNode('*',n,0); + n = createNode(ri,'*',n,0); } else if (ri->tokenType == '|') { NodePtr n1 = regex(ri); - n = createNode('|',n,n1); + n = createNode(ri,'|',n,n1); } else if (ri->tokenType == ')') { return n; } else { NodePtr n1 = regex(ri); - n = createNode('+',n,n1); + n = createNode(ri,'+',n,n1); } } return n; } diff -r 7809fb223dc9 -r 50a146c05192 c/regexParser/printTree.cc --- a/c/regexParser/printTree.cc Fri Oct 23 15:38:49 2015 +0900 +++ b/c/regexParser/printTree.cc Fri Oct 23 17:20:54 2015 +0900 @@ -8,7 +8,12 @@ descendTree(n->right); d--; } - printf("%*c%c\n",d*4, ' ',n->Value.character); + if (n->tokenType == 'a') { + printf("%*c(%d)%c\n",d*4, ' ',n->nodeNumber,n->Value.character); + } else { + printf("%*c%c\n",d*4, ' ',n->Value.character); + } + if (n->left != NULL) { d++; descendTree(n->left); diff -r 7809fb223dc9 -r 50a146c05192 c/regexParser/regexParser.h --- a/c/regexParser/regexParser.h Fri Oct 23 15:38:49 2015 +0900 +++ b/c/regexParser/regexParser.h Fri Oct 23 17:20:54 2015 +0900 @@ -13,7 +13,8 @@ } Word, *WordPtr; typedef struct node { - unsigned char type; + unsigned char tokenType; + int nodeNumber; union value { CharClassPtr cc; unsigned char character;