1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
|
/********************************************
rexp.h
copyright 1991, Michael D. Brennan
This is a source file for mawk, an implementation of
the AWK programming language.
Mawk is distributed without warranty under the terms of
the GNU General Public License, version 2, 1991.
********************************************/
/*$Log: rexp.h,v $
* Revision 1.2 1993/07/23 13:21:35 mike
* cleanup rexp code
*
* Revision 1.1.1.1 1993/07/03 18:58:27 mike
* move source to cvs
*
* Revision 3.6 1992/01/21 17:31:45 brennan
* moved ison() macro out of rexp[23].c
*
* Revision 3.5 91/10/29 10:53:55 brennan
* SIZE_T
*
* Revision 3.4 91/08/13 09:10:02 brennan
* VERSION .9994
*
* Revision 3.3 91/06/15 09:40:25 brennan
* gcc defines __STDC__ but might not have stdlib.h
*
* Revision 3.2 91/06/10 16:18:19 brennan
* changes for V7
*
* Revision 3.1 91/06/07 10:33:18 brennan
* VERSION 0.995
*
* Revision 1.3 91/06/05 08:57:57 brennan
* removed RE_xmalloc()
*
* Revision 1.2 91/06/03 07:23:26 brennan
* changed type of RE_error_trap
*
* Revision 1.1 91/06/03 07:05:41 brennan
* Initial revision
*
*/
#ifndef REXP_H
#define REXP_H
#include "nstd.h"
#include <stdio.h>
#include <setjmp.h>
PTR PROTO( RE_malloc, (unsigned) ) ;
PTR PROTO( RE_realloc, (void *,unsigned) ) ;
/* finite machine state types */
#define M_STR 0
#define M_CLASS 1
#define M_ANY 2
#define M_START 3
#define M_END 4
#define M_U 5
#define M_1J 6
#define M_2JA 7
#define M_2JB 8
#define M_ACCEPT 9
#define U_ON 10
#define U_OFF 0
#define END_OFF 0
#define END_ON (2*U_ON)
typedef unsigned char BV[32] ; /* bit vector */
typedef struct
{ char type ;
unsigned char len ; /* used for M_STR */
union
{
char *str ; /* string */
BV *bvp ; /* class */
int jump ;
} data ;
} STATE ;
#define STATESZ (sizeof(STATE))
typedef struct
{ STATE *start, *stop ; } MACHINE ;
/* tokens */
#define T_OR 1 /* | */
#define T_CAT 2
#define T_STAR 3 /* * */
#define T_PLUS 4 /* + */
#define T_Q 5 /* ? */
#define T_LP 6 /* ( */
#define T_RP 7 /* ) */
#define T_START 8 /* ^ */
#define T_END 9 /* $ */
#define T_ANY 10 /* . */
#define T_CLASS 11 /* starts with [ */
#define T_SLASH 12 /* \ */
#define T_CHAR 13 /* all the rest */
#define T_STR 14
#define T_U 15
/* precedences and error codes */
#define L 0
#define EQ 1
#define G 2
#define E1 (-1)
#define E2 (-2)
#define E3 (-3)
#define E4 (-4)
#define E5 (-5)
#define E6 (-6)
#define E7 (-7)
#define MEMORY_FAILURE 5
#define ison(b,x) ((b)[((unsigned char)(x))>>3] & (1<<((x)&7)))
/* struct for the run time stack */
typedef struct {
STATE *m ; /* save the machine ptr */
int u ; /* save the u_flag */
char *s ; /* save the active string ptr */
char *ss ; /* save the match start -- only used by REmatch */
} RT_STATE ; /* run time state */
/* error trap */
extern int REerrno ;
void PROTO(RE_error_trap, (int) ) ;
MACHINE PROTO( RE_u, (void) ) ;
MACHINE PROTO( RE_start, (void) ) ;
MACHINE PROTO( RE_end, (void) ) ;
MACHINE PROTO( RE_any, (void) ) ;
MACHINE PROTO( RE_str, (char *, unsigned) ) ;
MACHINE PROTO( RE_class, (BV *) ) ;
void PROTO( RE_cat, (MACHINE *, MACHINE *) ) ;
void PROTO( RE_or, (MACHINE *, MACHINE *) ) ;
void PROTO( RE_close, (MACHINE *) ) ;
void PROTO( RE_poscl, (MACHINE *) ) ;
void PROTO( RE_01, (MACHINE *) ) ;
void PROTO( RE_panic, (char *) ) ;
char *PROTO( str_str, (char *, char *, unsigned) ) ;
void PROTO( RE_lex_init , (char *) ) ;
int PROTO( RE_lex , (MACHINE *) ) ;
void PROTO( RE_run_stack_init, (void) ) ;
RT_STATE *PROTO( RE_new_run_stack, (void) ) ;
#endif /* REXP_H */
|