RPA Toolkit
used types cleaned up... -4
[rpatk.git] / rpa / rpacompiler.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 _RPACOMPILER_H_
22 #define _RPACOMPILER_H_
23
24 #include "rvm/rvmcodegen.h"
25 #include "rvm/rvmscope.h"
26 #include "rpa/rpavm.h"
27 #include "rpa/rpabitmap.h"
28
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32
33 #define RPA_RULENAME_MAXSIZE 256
34
35
36 #define RPA_COMPILER_CURRENTEXP(__co__) ((rpa_ruledef_t*)r_array_lastslot((__co__)->expressions))
37
38 /*
39  * The rpa_rulepref_t user preferences are compiled into
40  * rpa_ruledata_t and access in runtime.
41  */
42 typedef struct rpa_rulepref_s {
43         long ruleid;
44         long ruleuid;
45         unsigned long flags;
46 } rpa_rulepref_t;
47
48
49 /*
50  * This should be renamed to rpa_expdef_s
51  */
52 typedef struct rpa_ruledef_s {
53         unsigned long branch;
54         unsigned long start;
55         long startidx;
56         long dataidx;
57         long endidx;
58         long loopidx;
59         long successidx;
60         long failidx;
61         long againidx;
62         unsigned int ruleuid;
63         unsigned int flags;
64         rpabitmap_t bitmap;
65         rpa_rulepref_t *rulepref;
66 } rpa_ruledef_t;
67
68
69 typedef struct rpa_compiler_s {
70         rvm_codegen_t *cg;
71         rharray_t *ruleprefs;
72         rarray_t *expressions;
73         rvm_scope_t *scope;
74         unsigned long fpoff;
75         rpair_t currange;
76 } rpa_compiler_t;
77
78
79 rpa_compiler_t *rpa_compiler_create();
80 void rpa_compiler_destroy(rpa_compiler_t *co);
81 long rpa_compiler_addblob(rpa_compiler_t *co, long ruleid, long ruleuid, unsigned long flags, const char *name, unsigned long namesize);
82 long rpa_compiler_addblob_s(rpa_compiler_t *co, long ruleid, long ruleuid, unsigned long flags, const char *name);
83
84 int rpa_compiler_loop_begin(rpa_compiler_t *co, const char *name, unsigned int namesize);
85 int rpa_compiler_loop_begin_s(rpa_compiler_t *co, const char *name);
86 int rpa_compiler_loop_end(rpa_compiler_t *co);
87
88 int rpa_compiler_rule_begin(rpa_compiler_t *co, const char *name, unsigned int namesize, rpabitmap_t bitmap);
89 int rpa_compiler_rule_begin_s(rpa_compiler_t *co, const char *name, rpabitmap_t bitmap);
90 int rpa_compiler_rule_end(rpa_compiler_t *co);
91
92 int rpa_compiler_inlinerule_begin(rpa_compiler_t *co, const char *name, unsigned int namesize, unsigned int flags);
93 int rpa_compiler_inlinerule_begin_s(rpa_compiler_t *co, const char *name, unsigned int flags);
94 int rpa_compiler_inlinerule_end(rpa_compiler_t *co);
95
96 int rpa_compiler_exp_begin(rpa_compiler_t *co, unsigned int flags, rpabitmap_t bitmap);
97 int rpa_compiler_exp_end(rpa_compiler_t *co);
98
99 int rpa_compiler_altexp_begin(rpa_compiler_t *co, unsigned int flags, rpabitmap_t bitmap);
100 int rpa_compiler_altexp_end(rpa_compiler_t *co);
101
102 int rpa_compiler_branch_begin(rpa_compiler_t *co, unsigned int flags, rpabitmap_t bitmap);
103 int rpa_compiler_branch_end(rpa_compiler_t *co);
104
105 int rpa_compiler_nonloopybranch_begin(rpa_compiler_t *co, unsigned int flags);
106 int rpa_compiler_nonloopybranch_end(rpa_compiler_t *co);
107
108 int rpa_compiler_class_begin(rpa_compiler_t *co, unsigned int flags);
109 int rpa_compiler_class_end(rpa_compiler_t *co);
110
111 int rpa_compiler_notexp_begin(rpa_compiler_t *co, unsigned int flags);
112 int rpa_compiler_notexp_end(rpa_compiler_t *co);
113
114 void rpa_compiler_index_reference(rpa_compiler_t *co, unsigned long index, unsigned int qflag);
115 void rpa_compiler_index_reference_nan(rpa_compiler_t *co, unsigned long index);
116 void rpa_compiler_index_reference_opt(rpa_compiler_t *co, unsigned long index);
117 void rpa_compiler_index_reference_mul(rpa_compiler_t *co, unsigned long index);
118 void rpa_compiler_index_reference_mop(rpa_compiler_t *co, unsigned long index);
119 void rpa_compiler_reference(rpa_compiler_t *co, const char *name, unsigned int namesize, unsigned int qflag);
120 void rpa_compiler_reference_nan(rpa_compiler_t *co, const char *name, unsigned int namesize);
121 void rpa_compiler_reference_opt(rpa_compiler_t *co, const char *name, unsigned int namesize);
122 void rpa_compiler_reference_mul(rpa_compiler_t *co, const char *name, unsigned int namesize);
123 void rpa_compiler_reference_mop(rpa_compiler_t *co, const char *name, unsigned int namesize);
124 void rpa_compiler_reference_s(rpa_compiler_t *co, const char *name, unsigned int qflag);
125 void rpa_compiler_reference_nan_s(rpa_compiler_t *co, const char *name);
126 void rpa_compiler_reference_opt_s(rpa_compiler_t *co, const char *name);
127 void rpa_compiler_reference_mul_s(rpa_compiler_t *co, const char *name);
128 void rpa_compiler_reference_mop_s(rpa_compiler_t *co, const char *name);
129
130 void rpa_compiler_rulepref_set_ruleid(rpa_compiler_t *co, const char *name, unsigned int namesize, long ruleid);
131 void rpa_compiler_rulepref_set_ruleid_s(rpa_compiler_t *co, const char *name, long ruleid);
132 void rpa_compiler_rulepref_set_ruleuid(rpa_compiler_t *co, const char *name, unsigned int namesize, long ruleuid);
133 void rpa_compiler_rulepref_set_ruleuid_s(rpa_compiler_t *co, const char *name, long ruleuid);
134 void rpa_compiler_rulepref_set_flag(rpa_compiler_t *co, const char *name, unsigned int namesize, unsigned long flag);
135 void rpa_compiler_rulepref_set_flag_s(rpa_compiler_t *co, const char *name, unsigned long flag);
136 void rpa_compiler_rulepref_clear_flag(rpa_compiler_t *co, const char *name, unsigned int namesize, unsigned long flag);
137 void rpa_compiler_rulepref_clear_flag_s(rpa_compiler_t *co, const char *name, unsigned long flag);
138 void rpa_compiler_rulepref_set(rpa_compiler_t *co, const char *name, unsigned int namesize, long ruleid, long ruleuid, unsigned long flags);
139 void rpa_compiler_rulepref_set_s(rpa_compiler_t *co, const char *name, long ruleid, long ruleuid, unsigned long flags);
140 #ifdef __cplusplus
141 }
142 #endif
143
144 #endif