2 * CDE - Common Desktop Environment
4 * Copyright (c) 1993-2012, The Open Group. All rights reserved.
6 * These libraries and programs are free software; you can
7 * redistribute them and/or modify them under the terms of the GNU
8 * Lesser General Public License as published by the Free Software
9 * Foundation; either version 2 of the License, or (at your option)
12 * These libraries and programs are distributed in the hope that
13 * they will be useful, but WITHOUT ANY WARRANTY; without even the
14 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU Lesser General Public License for more
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with these librararies and programs; if not, write
20 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21 * Floor, Boston, MA 02110-1301 USA
23 /* $XConsortium: relib.h /main/3 1995/11/01 18:22:46 rswiston $ */
24 /***************************************************************
26 * AT&T - PROPRIETARY *
28 * THIS IS PROPRIETARY SOURCE CODE LICENSED BY *
31 * Copyright (c) 1995 AT&T Corp. *
32 * All Rights Reserved *
34 * This software is licensed by AT&T Corp. *
35 * under the terms and conditions of the license in *
36 * http://www.research.att.com/orgs/ssr/book/reuse *
38 * This software was created by the *
39 * Software Engineering Research Department *
40 * AT&T Bell Laboratories *
42 * For further information contact *
43 * gsf@research.att.com *
45 ***************************************************************/
47 /* : : generated by proto : : */
50 * AT&T Bell Laboratories
52 * regular expression library private definitions
56 #if !defined(__PROTO__)
57 #if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus)
58 #if defined(__cplusplus)
59 #define __MANGLE__ "C"
64 #define __PROTO__(x) x
66 #define __PARAM__(n,o) n
67 #if !defined(__STDC__) && !defined(__cplusplus)
68 #if !defined(c_plusplus)
79 #define __PROTO__(x) ()
80 #define __OTORP__(x) x
81 #define __PARAM__(n,o) o
89 #if defined(__cplusplus) || defined(c_plusplus)
90 #define __VARARG__ ...
94 #if defined(__STDARG__)
95 #define __VA_START__(p,a) va_start(p,a)
97 #define __VA_START__(p,a) va_start(p)
105 #define NCLASS 16 /* max # [...] expressions */
106 #define NMATCH ('9'-'0'+1) /* max # (...) expressions */
108 typedef struct /* sub-expression match */
110 char* sp; /* start in source string */
111 char* ep; /* end in source string */
114 typedef struct /* sub-expression match table */
116 Match_t m[NMATCH + 1];
119 typedef struct /* character class bit vector */
121 char map[UCHAR_MAX / CHAR_BIT + 1];
124 typedef struct Inst /* machine instruction */
126 int type; /* <TOKEN ==> literal, otherwise action */
130 int sid; /* sub-expression id for RBRA and LBRA */
131 struct Inst* other; /* for right child */
132 char* cls; /* CCLASS bit vector */
135 struct Inst* left; /* left child */
139 * NOTE: subexp must be the first element to match Re_program_t.match
142 #define _RE_PROGRAM_PRIVATE_ \
143 Subexp_t subexp; /* sub-expression matches */ \
144 int flags; /* RE_* flags */ \
145 Inst_t* startinst; /* start pc */ \
146 Class_t chrset[NCLASS]; /* .data */ \
147 Inst_t firstinst[5]; /* .text */
151 #define clrbit(set,bit) (set[(bit)/CHAR_BIT]&=~(1<<((bit)%CHAR_BIT)))
152 #define setbit(set,bit) (set[(bit)/CHAR_BIT]|=(1<<((bit)%CHAR_BIT)))
153 #define tstbit(set,bit) ((set[(bit)/CHAR_BIT]&(1<<((bit)%CHAR_BIT)))!=0)
157 #define right u.other
163 * TOKEN<=x<OPERATOR are tokens, i.e. operands for operators
164 * >=OPERATOR are operators, value == precedence
167 #define TOKEN (UCHAR_MAX+1)
168 #define ANY (UCHAR_MAX+1) /* `.' any character */
169 #define NOP (UCHAR_MAX+2) /* no operation (internal) */
170 #define BOL (UCHAR_MAX+3) /* `^' beginning of line */
171 #define EOL (UCHAR_MAX+4) /* `$' end of line */
172 #define BID (UCHAR_MAX+5) /* `\<' begin identifier */
173 #define EID (UCHAR_MAX+6) /* `\>' end identifier */
174 #define CCLASS (UCHAR_MAX+7) /* `[]' character class */
175 #define SUBEXPR (UCHAR_MAX+8) /* `\#' sub-expression */
176 #define END (UCHAR_MAX+9) /* terminate: match found */
178 #define OPERATOR (UCHAR_MAX+11)
179 #define START (UCHAR_MAX+11) /* start, stack marker */
180 #define RBRA (UCHAR_MAX+12) /* `)' right bracket */
181 #define LBRA (UCHAR_MAX+13) /* `(' left bracket */
182 #define OR (UCHAR_MAX+14) /* `|' alternation */
183 #define CAT (UCHAR_MAX+15) /* concatentation (implicit) */
184 #define STAR (UCHAR_MAX+16) /* `*' closure */
185 #define PLUS (UCHAR_MAX+17) /* a+ == aa* */
186 #define QUEST (UCHAR_MAX+18) /* a? == 0 or 1 a's */