1/*
2  tre-parse.c - Regexp parser definitions
3
4  This software is released under a BSD-style license.
5  See the file LICENSE for details and copyright.
6
7*/
8
9#ifndef TRE_PARSE_H
10#define TRE_PARSE_H 1
11
12/* Parse context. */
13typedef struct {
14  /* Memory allocator.	The AST is allocated using this. */
15  tre_mem_t mem;
16  /* Stack used for keeping track of regexp syntax. */
17  tre_stack_t *stack;
18  /* The parse result. */
19  tre_ast_node_t *result;
20  /* The regexp to parse and its length. */
21  const tre_char_t *re;
22  /* The first character of the entire regexp. */
23  const tre_char_t *re_start;
24  /* The first character after the end of the regexp. */
25  const tre_char_t *re_end;
26  int len;
27  /* Current submatch ID. */
28  int submatch_id;
29  /* Current position (number of literal). */
30  int position;
31  /* The highest back reference or -1 if none seen so far. */
32  int max_backref;
33  /* This flag is set if the regexp uses approximate matching. */
34  int have_approx;
35  /* Compilation flags. */
36  int cflags;
37  /* If this flag is set the top-level submatch is not captured. */
38  int nofirstsub;
39  /* The currently set approximate matching parameters. */
40  int params[TRE_PARAM_LAST];
41} tre_parse_ctx_t;
42
43/* Parses a wide character regexp pattern into a syntax tree.  This parser
44   handles both syntaxes (BRE and ERE), including the TRE extensions. */
45reg_errcode_t
46tre_parse(tre_parse_ctx_t *ctx);
47
48#endif /* TRE_PARSE_H */
49
50/* EOF */
51