Lines Matching refs:ps

29 static struct rx_node *_or_term(struct parse_sp *ps);
31 static void _single_char(struct parse_sp *ps, unsigned int c, const char *ptr) in _single_char() argument
33 ps->type = 0; in _single_char()
34 ps->cursor = ptr + 1; in _single_char()
35 dm_bit_clear_all(ps->charset); in _single_char()
36 dm_bit_set(ps->charset, c); in _single_char()
43 static int _rx_get_token(struct parse_sp *ps) in _rx_get_token() argument
47 const char *ptr = ps->cursor; in _rx_get_token()
48 if (ptr == ps->rx_end) { /* end of input ? */ in _rx_get_token()
49 ps->type = -1; in _rx_get_token()
58 dm_bit_set_all(ps->charset); in _rx_get_token()
61 dm_bit_clear(ps->charset, 0); in _rx_get_token()
66 dm_bit_clear_all(ps->charset); in _rx_get_token()
68 while ((ptr < ps->rx_end) && (*ptr != ']')) { in _rx_get_token()
89 if (ptr == ps->rx_end) { in _rx_get_token()
108 dm_bit_clear(ps->charset, lc); in _rx_get_token()
110 dm_bit_set(ps->charset, lc); in _rx_get_token()
116 dm_bit_clear(ps->charset, c); in _rx_get_token()
118 dm_bit_set(ps->charset, c); in _rx_get_token()
124 if (ptr >= ps->rx_end) { in _rx_get_token()
125 ps->type = -1; in _rx_get_token()
129 ps->type = 0; in _rx_get_token()
130 ps->cursor = ptr + 1; in _rx_get_token()
142 ps->type = (int) *ptr; in _rx_get_token()
143 ps->cursor = ptr + 1; in _rx_get_token()
147 _single_char(ps, HAT_CHAR, ptr); in _rx_get_token()
151 _single_char(ps, DOLLAR_CHAR, ptr); in _rx_get_token()
156 ps->type = 0; in _rx_get_token()
157 ps->cursor = ptr + 1; in _rx_get_token()
158 dm_bit_set_all(ps->charset); in _rx_get_token()
159 dm_bit_clear(ps->charset, (int) '\n'); in _rx_get_token()
160 dm_bit_clear(ps->charset, (int) '\r'); in _rx_get_token()
161 dm_bit_clear(ps->charset, 0); in _rx_get_token()
167 if (ptr >= ps->rx_end) { in _rx_get_token()
170 ps->type = -1; in _rx_get_token()
174 ps->type = 0; in _rx_get_token()
175 ps->cursor = ptr + 1; in _rx_get_token()
176 dm_bit_clear_all(ps->charset); in _rx_get_token()
179 dm_bit_set(ps->charset, (int) '\n'); in _rx_get_token()
182 dm_bit_set(ps->charset, (int) '\r'); in _rx_get_token()
185 dm_bit_set(ps->charset, (int) '\t'); in _rx_get_token()
188 dm_bit_set(ps->charset, (int) *ptr); in _rx_get_token()
194 ps->type = 0; in _rx_get_token()
195 ps->cursor = ptr + 1; in _rx_get_token()
196 dm_bit_clear_all(ps->charset); in _rx_get_token()
197 dm_bit_set(ps->charset, (int) *ptr); in _rx_get_token()
223 static struct rx_node *_term(struct parse_sp *ps) in _term() argument
227 switch (ps->type) { in _term()
229 if (!(n = _node(ps->mem, CHARSET, NULL, NULL))) { in _term()
234 dm_bit_copy(n->charset, ps->charset); in _term()
235 _rx_get_token(ps); /* match charset */ in _term()
239 _rx_get_token(ps); /* match '(' */ in _term()
240 n = _or_term(ps); in _term()
241 if (ps->type != ')') { in _term()
245 _rx_get_token(ps); /* match ')' */ in _term()
255 static struct rx_node *_closure_term(struct parse_sp *ps) in _closure_term() argument
259 if (!(l = _term(ps))) in _closure_term()
263 switch (ps->type) { in _closure_term()
265 n = _node(ps->mem, STAR, l, NULL); in _closure_term()
269 n = _node(ps->mem, PLUS, l, NULL); in _closure_term()
273 n = _node(ps->mem, QUEST, l, NULL); in _closure_term()
285 _rx_get_token(ps); in _closure_term()
292 static struct rx_node *_cat_term(struct parse_sp *ps) in _cat_term() argument
296 if (!(l = _closure_term(ps))) in _cat_term()
299 if (ps->type == '|') in _cat_term()
302 if (!(r = _cat_term(ps))) in _cat_term()
305 if (!(n = _node(ps->mem, CAT, l, r))) in _cat_term()
311 static struct rx_node *_or_term(struct parse_sp *ps) in _or_term() argument
315 if (!(l = _cat_term(ps))) in _or_term()
318 if (ps->type != '|') in _or_term()
321 _rx_get_token(ps); /* match '|' */ in _or_term()
323 if (!(r = _or_term(ps))) { in _or_term()
328 if (!(n = _node(ps->mem, OR, l, r))) in _or_term()
338 struct parse_sp *ps = dm_pool_zalloc(mem, sizeof(*ps)); in rx_parse_tok() local
340 if (!ps) { in rx_parse_tok()
345 ps->mem = mem; in rx_parse_tok()
346 ps->charset = dm_bitset_create(mem, 256); in rx_parse_tok()
347 ps->cursor = begin; in rx_parse_tok()
348 ps->rx_end = end; in rx_parse_tok()
349 _rx_get_token(ps); /* load the first token */ in rx_parse_tok()
351 if (!(r = _or_term(ps))) { in rx_parse_tok()
353 dm_pool_free(mem, ps); in rx_parse_tok()