📄 dfa.h
字号:
/* 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 + -