Mercurial > hg > Applications > Grep
view c/regexParser/createBitVectorList.cc @ 101:2cc097419169 impl-bitvector
fix print
author | masasann |
---|---|
date | Tue, 17 Nov 2015 06:51:12 +0900 |
parents | 804e51f19f17 |
children | 07f4761c6c58 |
line wrap: on
line source
#include <stdio.h> #include <stdlib.h> #include <ctype.h> #include "bitVector.h" #include "regexParser.h" extern BitVectorPtr bitSet(int); extern void bitPrint(BitVectorPtr); BitVectorListPtr createBitVector(NodePtr); BitVectorListPtr descendTreeNode(NodePtr,BitVectorListPtr); BitVectorListPtr setNextBitVectorList(BitVectorListPtr bvl, BitVectorListPtr next, NodePtr n); BitVectorListPtr initBvl; BitVectorListPtr allocateBitVectorList() { BitVectorListPtr bvl = (BitVectorListPtr)malloc(sizeof(BitVectorList)); bvl->self = bvl; bvl->bi = (BitVectorPtr)malloc(sizeof(BitVector)); return bvl; } BitVectorListPtr createBitVector(NodePtr n,BitVectorListPtr bvl) { // BitVectorListPtr nextBvl = bvl->next[(int)n->Value.character] = allocateBitVectorList(); BitVectorListPtr nextBvl = allocateBitVectorList(); // nextBvl->self = bvl->next[(int)n->Value.character]; nextBvl->bi = bitSet(n->nodeNumber); nextBvl->initBvl = initBvl; return nextBvl; } BitVectorListPtr initBitVector() { BitVectorListPtr bvl = allocateBitVectorList(); bvl->initBvl = initBvl = bvl; bvl->bi = bitSet(0); for (int i = 0; i < 256; i++) { bvl->next[i] = NULL; } return bvl; } void printBitVectorList (BitVectorListPtr bvl) { bool flag = true; for (int i = 0; i < 256; i++) { if (bvl->next[i] != NULL) { if (flag){ puts("----"); printf(" state : "); bitPrint(bvl->bi); flag = false; } printf("input char : %c\n",i); printf("next state : ");bitPrint(bvl->next[i]->bi); } } for (int i = 0; i < 256; i++) { if (bvl->next[i] != NULL) { printBitVectorList(bvl->next[i]); } } } BitVectorListPtr descendTreeNode(NodePtr n,BitVectorListPtr bvl) { BitVectorListPtr prev = bvl; if (n->tokenType == '*') { } else if (n->Value.character == '|') { setNextBitVectorList(prev,descendTreeNode(n->left,bvl),n->left); bvl = setNextBitVectorList(bvl,descendTreeNode(n->right,bvl),n->right); } else if (n->Value.character == '+') { bvl = setNextBitVectorList(prev,descendTreeNode(n->left,bvl),n->left); bvl = setNextBitVectorList(bvl,descendTreeNode(n->right,bvl),n->right); } else if (n->tokenType == 'a') { bvl = createBitVector(n,bvl); } return bvl; } BitVectorListPtr setNextBitVectorList(BitVectorListPtr bvl, BitVectorListPtr next, NodePtr n){ if (isalnum((int)n->Value.character)){ bvl->next[(int)n->Value.character] = next; } return next; } BitVectorListPtr createBitVectorList(NodePtr n) { BitVectorListPtr bvl = initBitVector(); descendTreeNode(n,bvl); printBitVectorList(bvl); return bvl; }