source: trunk/third/rx/rx/rxnode.h @ 10430

Revision 10430, 3.6 KB checked in by ghudson, 27 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r10429, which included commits to RCS files with non-trunk default branches.
Line 
1/* classes: h_files */
2
3#ifndef RXNODEH
4#define RXNODEH
5/*      Copyright (C) 1995, 1996 Tom Lord
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU Library General Public License as published by
9 * the Free Software Foundation; either version 2, or (at your option)
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU Library General Public License for more details.
16 *
17 * You should have received a copy of the GNU Library General Public License
18 * along with this software; see the file COPYING.  If not, write to
19 * the Free Software Foundation, 59 Temple Place - Suite 330,
20 * Boston, MA 02111-1307, USA.
21 */
22
23
24
25/*
26 * Tom Lord (lord@cygnus.com, lord@gnu.ai.mit.edu)
27 */
28
29
30#include "rxbitset.h"
31#include "rxcset.h"
32
33
34
35enum rexp_node_type
36{
37  r_cset = 0,                   /* Match from a character set. `a' or `[a-z]'*/
38  r_concat = 1,                 /* Concat two subexpressions.   `ab' */
39  r_alternate = 2,              /* Choose one of two subexpressions. `a\|b' */
40  r_opt = 3,                    /* Optional subexpression. `a?' */
41  r_star = 4,                   /* Repeated subexpression. `a*' */
42  r_plus = 5,                   /* Nontrivially repeated subexpression. `a+' */
43  r_string = 6,                 /* Shorthand for a concatenation of characters */
44  r_cut = 7,                    /* Generates a tagged, final nfa state. */
45
46  /* see RX_regular_node_type */
47
48  r_interval = 8,               /* Counted subexpression.  `a{4, 1000}' */
49  r_parens = 9,                 /* Parenthesized subexpression */
50  r_context = 10                /* Context-sensative operator such as "^" */
51};
52
53#define RX_regular_node_type(T)  ((T) <= r_interval)
54
55
56
57struct rx_string
58{
59  unsigned long len;
60  unsigned long reallen;
61  unsigned char *contents;
62};
63
64struct rexp_node
65{
66  int refs;
67  enum rexp_node_type type;
68  struct
69  {
70    int cset_size;
71    rx_Bitset cset;
72    int intval;
73    int intval2;
74    struct
75      {
76        struct rexp_node *left;
77        struct rexp_node *right;
78      } pair;
79    struct rx_string cstr;
80  } params;
81  int id;
82  int len;
83  int observed;
84  struct rexp_node * simplified;
85  struct rx_cached_rexp * cr;
86};
87
88
89
90#ifdef __STDC__
91extern int rx_adjoin_string (struct rx_string *str, char c);
92extern struct rexp_node * rexp_node (int type);
93extern struct rexp_node * rx_mk_r_cset (int type, int size, rx_Bitset b);
94extern struct rexp_node * rx_mk_r_int (int type, int intval);
95extern struct rexp_node * rx_mk_r_str (int type, char c);
96extern struct rexp_node * rx_mk_r_binop (int type, struct rexp_node * a, struct rexp_node * b);
97extern struct rexp_node * rx_mk_r_monop (int type, struct rexp_node * a);
98extern void rx_free_rexp (struct rexp_node * node);
99extern void rx_save_rexp (struct rexp_node * node);
100extern struct rexp_node * rx_copy_rexp (int cset_size, struct rexp_node *node);
101extern struct rexp_node * rx_shallow_copy_rexp (int cset_size, struct rexp_node *node);
102extern int rx_rexp_equal (struct rexp_node * a, struct rexp_node * b);
103extern unsigned long rx_rexp_hash (struct rexp_node * node, unsigned long seed);
104
105#else /* STDC */
106extern int rx_adjoin_string ();
107extern struct rexp_node * rexp_node ();
108extern struct rexp_node * rx_mk_r_cset ();
109extern struct rexp_node * rx_mk_r_int ();
110extern struct rexp_node * rx_mk_r_str ();
111extern struct rexp_node * rx_mk_r_binop ();
112extern struct rexp_node * rx_mk_r_monop ();
113extern void rx_free_rexp ();
114extern void rx_save_rexp ();
115extern struct rexp_node * rx_copy_rexp ();
116extern struct rexp_node * rx_shallow_copy_rexp ();
117extern int rx_rexp_equal ();
118extern unsigned long rx_rexp_hash ();
119
120#endif /* STDC */
121
122
123
124
125#endif  /* RXNODEH */
Note: See TracBrowser for help on using the repository browser.