diff c/regexParser/createRegexTree.cc @ 89:50a146c05192

add NodeNumber in Regex Parser tree
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Fri, 23 Oct 2015 17:20:54 +0900
parents aef2546cd130
children 912d7bd51f38
line wrap: on
line diff
--- 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 <stdlib.h>
+#include <stdio.h>
 #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 @@
 // <literal> ::= [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;
 }