view regexParser/regexParser.h @ 189:fccf7941ecc2 pairPro

fix
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Fri, 25 Dec 2015 14:42:31 +0900
parents 109d22faf7b5
children 3e8e5780ad4a
line wrap: on
line source

#include "error.h"
#define NEW(type) (type*)malloc(sizeof(type))
#define SYNTAX_NODENUMBER 100

#ifndef INCLUDED_STRUCT
#define INCLUDED_STRUCT
typedef struct bitVector {
    unsigned long bitContainer;
}BitVector,*BitVectorPtr;

typedef struct word {
    unsigned char *word;
    int length;
} Word, *WordPtr;

typedef struct utf8Range {
    unsigned long begin;
    unsigned long end;
    struct utf8Range *next; // only used in the parser.
} RangeList , *RangeListPtr;

typedef struct condition {
    RangeList range;
    Word w;
} Condition, *ConditionList;

typedef struct charClass {
    unsigned char type;
    struct charClass *left;
    struct charClass *right;
    Condition cond;
    BitVector nextState;
} CharClass, *CharClassPtr;

typedef struct node {
    unsigned char tokenType;
    CharClassPtr cc;
    int stateNum;
    int nextStateNum;
    typedef struct state {
        BitVector bitState;
        CharClassPtr cc;
        struct node *node;
        struct state *next;
    } State, *StatePtr;
    StatePtr state;
    struct node *left;
    struct node *right;
} Node, *NodePtr;

typedef struct stateStack {
    BitVector state;
    struct stateStack *next;
} StateStack, *StateStackPtr;

typedef struct transitionGenerator {
    long stateMax;
    StateStackPtr stack;
    node::StatePtr state;
    node::StatePtr stateArray;
    node::StatePtr currentState;
    node::StatePtr startState;
    node::StatePtr endState;
} TransitionGenerator, *TransitionGeneratorPtr;

typedef struct tgValue {
    bool asterisk;
    int stateNum;
    int stateBegin;
    int stateEnd;
    node::StatePtr tgState;
    TransitionGeneratorPtr tg;
} TGValue, *TGValuePtr;

enum charClassStackState {
    LEFT,
    SELF,
    RIGHT
};

typedef struct charClassStack {
    charClassStackState turn;
    CharClassPtr cc;
    struct charClassStack *next;
} CharClassStack, *CharClassStackPtr;

typedef struct charClassWalker {
    CharClassStackPtr stack;
    CharClassPtr next;
} CharClassWalker, *CharClassWalkerPtr;


typedef struct regexInfo {
    unsigned char *ptr;
    unsigned char tokenType;
    unsigned char *tokenValue;
    int stateNumber;
} RegexInfo, *RegexInfoPtr;
#endif
NodePtr createNode(RegexInfoPtr ri,unsigned char type,CharClassPtr cc, NodePtr left, NodePtr right);
extern CharClassPtr createCharClassRange(unsigned long begin, unsigned long end,unsigned long state, CharClassPtr left, CharClassPtr right);