RPA Toolkit
Work on rexdfa_t matching. Replaced rexdb_t DFA with rexdfa_t in rexgrep.
[rpatk.git] / rex / rexdfa.h
1 /*
2  *  Regular Pattern Analyzer (RPA)
3  *  Copyright (c) 2009-2010 Martin Stoilov
4  *
5  *  This program is free software: you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation, either version 3 of the License, or
8  *  (at your option) any later version.
9  *
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU General Public License for more details.
14  *
15  *  You should have received a copy of the GNU General Public License
16  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  *
18  *  Martin Stoilov <martin@rpasearch.com>
19  */
20
21 #ifndef _REXDFA_H_
22 #define _REXDFA_H_
23
24 #include "rex/rexdef.h"
25 #include "rex/rexdb.h"
26
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30
31
32 #define REX_DFA_DEADSTATE (0)
33 #define REX_DFA_STARTSTATE (1)
34
35 /*
36  * Sub-state info definition
37  */
38 typedef struct rexdfss_s {
39         unsigned int type;
40         unsigned long uid;
41         rexuserdata_t userdata;
42 } rexdfss_t;
43
44
45 /*
46  * Transition definition
47  */
48 typedef struct rexdft_s {
49         rexchar_t lowin;
50         rexchar_t highin;
51         unsigned long state;
52 } rexdft_t;
53
54
55 /*
56  * State definition
57  */
58 typedef struct rexdfs_s {
59         unsigned int type;
60         unsigned long trans;
61         unsigned long ntrans;
62         unsigned long substates;
63         unsigned long nsubstates;
64         unsigned long accsubstates;
65         unsigned long naccsubstates;
66 } rexdfs_t;
67
68
69 /*
70  * Automata definition
71  */
72 typedef struct rexdfa_s {
73         unsigned long nstates;
74         rexdfs_t *states;
75         unsigned long ntrans;
76         rexdft_t *trans;
77         unsigned long nsubstates;
78         rexdfss_t *substates;
79         unsigned long naccsubstates;
80         rexdfss_t *accsubstates;
81 } rexdfa_t;
82
83
84 rexdfa_t *rex_dfa_create(unsigned long nstates, unsigned long ntrans, unsigned long nsubsets, unsigned long naccsubsets);
85 rexdfa_t *rex_dfa_create_from_db(rexdb_t *db);
86 void rex_dfa_destroy(rexdfa_t *dfa);
87 void rex_dfa_dumpstate(rexdfa_t *dfa, unsigned long nstate);
88 rexdfs_t *rex_dfa_state(rexdfa_t *dfa, unsigned long nstate);
89 rexdft_t *rex_dfa_transition(rexdfa_t *dfa, unsigned long nstate, unsigned long ntransition);
90 rexdfss_t *rex_dfa_substate(rexdfa_t *dfa, unsigned long nstate, unsigned long nsubstate);
91 rexdfss_t *rex_dfa_accsubstate(rexdfa_t *dfa, unsigned long nstate, unsigned long naccsubstate);
92 long rex_dfa_next(rexdfa_t *dfa, unsigned long nstate, rexchar_t input);
93
94 #ifdef __cplusplus
95 }
96 #endif
97
98
99 #endif /* _REXDFA_H_ */