⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dfa.h

📁 早期freebsd实现
💻 H
📖 第 1 页 / 共 2 页
字号:
/* dfa.h - declarations for GNU deterministic regexp compiler   Copyright (C) 1988 Free Software Foundation, Inc.                      Written June, 1988 by Mike Haertel		       NO WARRANTY  BECAUSE THIS PROGRAM IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELYNO WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW.  EXCEPTWHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC,RICHARD M. STALLMAN AND/OR OTHER PARTIES PROVIDE THIS PROGRAM "AS IS"WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY ANDFITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITYAND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE PROGRAM PROVEDEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR ORCORRECTION. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M.STALLMAN, THE FREE SOFTWARE FOUNDATION, INC., AND/OR ANY OTHER PARTYWHO MAY MODIFY AND REDISTRIBUTE THIS PROGRAM AS PERMITTED BELOW, BELIABLE TO YOU FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OROTHER SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THEUSE OR INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA ORDATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES ORA FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) THISPROGRAM, EVEN IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCHDAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY.		GENERAL PUBLIC LICENSE TO COPY  1. You may copy and distribute verbatim copies of this source fileas you receive it, in any medium, provided that you conspicuously andappropriately publish on each copy a valid copyright notice "Copyright (C) 1988 Free Software Foundation, Inc."; and include following thecopyright notice a verbatim copy of the above disclaimer of warrantyand of this License.  You may charge a distribution fee for thephysical act of transferring a copy.  2. You may modify your copy or copies of this source file orany portion of it, and copy and distribute such modifications underthe terms of Paragraph 1 above, provided that you also do the following:    a) cause the modified files to carry prominent notices stating    that you changed the files and the date of any change; and    b) cause the whole of any work that you distribute or publish,    that in whole or in part contains or is a derivative of this    program or any part thereof, to be licensed at no charge to all    third parties on terms identical to those contained in this    License Agreement (except that you may choose to grant more extensive    warranty protection to some or all third parties, at your option).    c) You may charge a distribution fee for the physical act of    transferring a copy, and you may at your option offer warranty    protection in exchange for a fee.Mere aggregation of another unrelated program with this program (or itsderivative) on a volume of a storage or distribution medium does not bringthe other program under the scope of these terms.  3. You may copy and distribute this program or any portion of it incompiled, executable or object code form under the terms of Paragraphs1 and 2 above provided that you do the following:    a) accompany it with the complete corresponding machine-readable    source code, which must be distributed under the terms of    Paragraphs 1 and 2 above; or,    b) accompany it with a written offer, valid for at least three    years, to give any third party free (except for a nominal    shipping charge) a complete machine-readable copy of the    corresponding source code, to be distributed under the terms of    Paragraphs 1 and 2 above; or,    c) accompany it with the information you received as to where the    corresponding source code may be obtained.  (This alternative is    allowed only for noncommercial distribution and only if you    received the program in object code or executable form alone.)For an executable file, complete source code means all the source code forall modules it contains; but, as a special exception, it need not includesource code for modules which are standard libraries that accompany theoperating system on which the executable file runs.  4. You may not copy, sublicense, distribute or transfer this programexcept as expressly provided under this License Agreement.  Any attemptotherwise to copy, sublicense, distribute or transfer this program is void andyour rights to use the program under this License agreement shall beautomatically terminated.  However, parties who have received computersoftware programs from you with this License Agreement will not havetheir licenses terminated so long as such parties remain in full compliance.  5. If you wish to incorporate parts of this program into other freeprograms whose distribution conditions are different, write to the FreeSoftware Foundation at 675 Mass Ave, Cambridge, MA 02139.  We have not yetworked out a simple rule that can be stated here, but we will often permitthis.  We will be guided by the two goals of preserving the free status ofall derivatives our free software and of promoting the sharing and reuse ofsoftware.In other words, you are welcome to use, share and improve this program.You are forbidden to forbid anyone else to use, share and improvewhat you give them.   Help stamp out software-hoarding!  */#ifdef __STDC__#ifdef SOMEDAY#define ISALNUM(c) isalnum(c)#define ISALPHA(c) isalpha(c)#define ISUPPER(c) isupper(c)#else#define ISALNUM(c) (isascii(c) && isalnum(c))#define ISALPHA(c) (isascii(c) && isalpha(c))#define ISUPPER(c) (isascii(c) && isupper(c))#endif#else /* ! __STDC__ */#define const#define ISALNUM(c) (isascii(c) && isalnum(c))#define ISALPHA(c) (isascii(c) && isalpha(c))#define ISUPPER(c) (isascii(c) && isupper(c))#endif /* ! __STDC__ *//* 1 means plain parentheses serve as grouping, and backslash     parentheses are needed for literal searching.   0 means backslash-parentheses are grouping, and plain parentheses     are for literal searching.  */#define RE_NO_BK_PARENS 1L/* 1 means plain | serves as the "or"-operator, and \| is a literal.   0 means \| serves as the "or"-operator, and | is a literal.  */#define RE_NO_BK_VBAR (1L << 1)/* 0 means plain + or ? serves as an operator, and \+, \? are literals.   1 means \+, \? are operators and plain +, ? are literals.  */#define RE_BK_PLUS_QM (1L << 2)/* 1 means | binds tighter than ^ or $.   0 means the contrary.  */#define RE_TIGHT_VBAR (1L << 3)/* 1 means treat \n as an _OR operator   0 means treat it as a normal character */#define RE_NEWLINE_OR (1L << 4)/* 0 means that a special characters (such as *, ^, and $) always have     their special meaning regardless of the surrounding context.   1 means that special characters may act as normal characters in some     contexts.  Specifically, this applies to:	^ - only special at the beginning, or after ( or |	$ - only special at the end, or before ) or |	*, +, ? - only special when not after the beginning, (, or | */#define RE_CONTEXT_INDEP_OPS (1L << 5)/* 1 means that \ in a character class escapes the next character (typically   a hyphen.  It also is overloaded to mean that hyphen at the end of the range   is allowable and means that the hyphen is to be taken literally. */#define	RE_AWK_CLASS_HACK (1L << 6)/* Now define combinations of bits for the standard possibilities.  */#ifdef notdef#define RE_SYNTAX_AWK (RE_NO_BK_PARENS | RE_NO_BK_VBAR | RE_CONTEXT_INDEP_OPS)#define RE_SYNTAX_EGREP (RE_SYNTAX_AWK | RE_NEWLINE_OR)#define RE_SYNTAX_GREP (RE_BK_PLUS_QM | RE_NEWLINE_OR)#define RE_SYNTAX_EMACS 0#endif/* The NULL pointer. */#ifndef NULL#define NULL 0#endif/* Number of bits in an unsigned char. */#ifndef CHARBITS#define CHARBITS 8#endif/* First integer value that is greater than any character code. */#define _NOTCHAR (1 << CHARBITS)/* INTBITS need not be exact, just a lower bound. */#ifndef INTBITS#define INTBITS (CHARBITS * sizeof (int))#endif/* Number of ints required to hold a bit for every character. */#define _CHARSET_INTS ((_NOTCHAR + INTBITS - 1) / INTBITS)/* Sets of unsigned characters are stored as bit vectors in arrays of ints. */typedef int _charset[_CHARSET_INTS];/* The regexp is parsed into an array of tokens in postfix form.  Some tokens   are operators and others are terminal symbols.  Most (but not all) of these   codes are returned by the lexical analyzer. */#ifdef __STDC__typedef enum{  _END = -1,			/* _END is a terminal symbol that matches the				   end of input; any value of _END or less in				   the parse tree is such a symbol.  Accepting				   states of the DFA are those that would have				   a transition on _END. */  /* Ordinary character values are terminal symbols that match themselves. */  _EMPTY = _NOTCHAR,		/* _EMPTY is a terminal symbol that matches				   the empty string. */  _BACKREF,			/* _BACKREF is generated by \<digit>; it				   it not completely handled.  If the scanner				   detects a transition on backref, it returns				   a kind of "semi-success" indicating that				   the match will have to be verified with				   a backtracking matcher. */  _BEGLINE,			/* _BEGLINE is a terminal symbol that matches				   the empty string if it is at the beginning				   of a line. */  _ALLBEGLINE,			/* _ALLBEGLINE is a terminal symbol that				   matches the empty string if it is at the				   beginning of a line; _ALLBEGLINE applies				   to the entire regexp and can only occur				   as the first token thereof.  _ALLBEGLINE				   never appears in the parse tree; a _BEGLINE				   is prepended with _CAT to the entire				   regexp instead. */  _ENDLINE,			/* _ENDLINE is a terminal symbol that matches				   the empty string if it is at the end of				   a line. */  _ALLENDLINE,			/* _ALLENDLINE is to _ENDLINE as _ALLBEGLINE				   is to _BEGLINE. */  _BEGWORD,			/* _BEGWORD is a terminal symbol that matches				   the empty string if it is at the beginning				   of a word. */  _ENDWORD,			/* _ENDWORD is a terminal symbol that matches				   the empty string if it is at the end of				   a word. */  _LIMWORD,			/* _LIMWORD is a terminal symbol that matches				   the empty string if it is at the beginning				   or the end of a word. */  _NOTLIMWORD,			/* _NOTLIMWORD is a terminal symbol that				   matches the empty string if it is not at				   the beginning or end of a word. */  _QMARK,			/* _QMARK is an operator of one argument that				   matches zero or one occurences of its				   argument. */  _STAR,			/* _STAR is an operator of one argument that				   matches the Kleene closure (zero or more				   occurrences) of its argument. */  _PLUS,			/* _PLUS is an operator of one argument that				   matches the positive closure (one or more				   occurrences) of its argument. */  _CAT,				/* _CAT is an operator of two arguments that				   matches the concatenation of its				   arguments.  _CAT is never returned by the				   lexical analyzer. */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -