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. */ 13 typedef 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 size_t 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 /* the CUR_MAX in use */ 42 int cur_max; 43 } tre_parse_ctx_t; 44 45 /* Parses a wide character regexp pattern into a syntax tree. This parser 46 handles both syntaxes (BRE and ERE), including the TRE extensions. */ 47 reg_errcode_t 48 tre_parse(tre_parse_ctx_t *ctx); 49 50 #endif /* TRE_PARSE_H */ 51 52 /* EOF */ 53