home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 22 gnu / 22-gnu.zip / gnurx.zip / rx / rxnode.h < prev    next >
C/C++ Source or Header  |  1995-12-31  |  3KB  |  109 lines

  1. /* classes: h_files */
  2.  
  3. #ifndef RXNODEH
  4. #define RXNODEH
  5. /***********************************************************
  6.  
  7. Copyright 1995 by Tom Lord
  8.  
  9.                         All Rights Reserved
  10.  
  11. Permission to use, copy, modify, and distribute this software and its 
  12. documentation for any purpose and without fee is hereby granted, 
  13. provided that the above copyright notice appear in all copies and that
  14. both that copyright notice and this permission notice appear in 
  15. supporting documentation, and that the name of the copyright holder not be
  16. used in advertising or publicity pertaining to distribution of the
  17. software without specific, written prior permission.  
  18.  
  19. Tom Lord DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
  20. INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
  21. EVENT SHALL TOM LORD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
  22. CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
  23. USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
  24. OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  25. PERFORMANCE OF THIS SOFTWARE.
  26.  
  27. ******************************************************************/
  28.  
  29.  
  30.  
  31. /*
  32.  * Tom Lord (lord@cygnus.com, lord@gnu.ai.mit.edu)
  33.  */
  34.  
  35.  
  36. #include "rxbitset.h"
  37. #include "rxcset.h"
  38.  
  39.  
  40.  
  41. enum rexp_node_type
  42. {
  43.   r_cset,            /* Match from a character set. `a' or `[a-z]'*/
  44.   r_concat,            /* Concat two subexpressions.   `ab' */
  45.   r_alternate,            /* Choose one of two subexpressions. `a\|b' */
  46.   r_opt,            /* Optional subexpression. `a?' */
  47.   r_star,            /* Repeated subexpression. `a*' */
  48.   r_plus,            /* Nontrivially repeated subexpression. `a+' */
  49.   r_interval,            /* Counted subexpression.  `a{4,1000}' */
  50.   r_parens,
  51.   r_context
  52. };
  53.  
  54.  
  55. struct rexp_node
  56. {
  57.   int refs;
  58.   enum rexp_node_type type;
  59.   struct
  60.   {
  61.     int cset_size;
  62.     rx_Bitset cset;
  63.     int intval;
  64.     int intval2;
  65.     struct
  66.       {
  67.     struct rexp_node *left;
  68.     struct rexp_node *right;
  69.       } pair;
  70.   } params;
  71.   int id;
  72.   int len;
  73.   int observed;
  74.   struct rexp_node * simplified;
  75.   struct rx_cached_rexp * cr;
  76. };
  77.  
  78.  
  79.  
  80.  
  81. #ifdef __STDC__
  82. extern struct rexp_node * rexp_node (int type);
  83. extern struct rexp_node * rx_mk_r_cset (int type, int size, rx_Bitset b);
  84. extern struct rexp_node * rx_mk_r_int (int type, int intval);
  85. extern struct rexp_node * rx_mk_r_binop (int type, struct rexp_node * a, struct rexp_node * b);
  86. extern struct rexp_node * rx_mk_r_monop (int type, struct rexp_node * a);
  87. extern void rx_free_rexp (struct rexp_node * node);
  88. extern void rx_save_rexp (struct rexp_node * node);
  89. extern struct rexp_node * rx_copy_rexp (int cset_size, struct rexp_node *node);
  90. extern int rx_rexp_equal (struct rexp_node * a, struct rexp_node * b);
  91. extern unsigned long rx_rexp_hash (struct rexp_node * node, unsigned long seed);
  92.  
  93. #else /* STDC */
  94. extern struct rexp_node * rexp_node ();
  95. extern struct rexp_node * rx_mk_r_cset ();
  96. extern struct rexp_node * rx_mk_r_int ();
  97. extern struct rexp_node * rx_mk_r_binop ();
  98. extern struct rexp_node * rx_mk_r_monop ();
  99. extern void rx_free_rexp ();
  100. extern void rx_save_rexp ();
  101. extern struct rexp_node * rx_copy_rexp ();
  102. extern int rx_rexp_equal ();
  103. extern unsigned long rx_rexp_hash ();
  104.  
  105. #endif /* STDC */
  106.  
  107.  
  108. #endif  /* RXNODEH */
  109.