diff options
author | Fredrik Lundh <fredrik@pythonware.com> | 2000-06-30 10:41:31 (GMT) |
---|---|---|
committer | Fredrik Lundh <fredrik@pythonware.com> | 2000-06-30 10:41:31 (GMT) |
commit | 43b3b49b5ab486295baef3a35cd8e836f735c065 (patch) | |
tree | 3ca960c788dafde87799443f2087dc661dc52d48 /Modules | |
parent | a4657f736c34e4bb1802b40246028c5bec545fe6 (diff) | |
download | cpython-43b3b49b5ab486295baef3a35cd8e836f735c065.zip cpython-43b3b49b5ab486295baef3a35cd8e836f735c065.tar.gz cpython-43b3b49b5ab486295baef3a35cd8e836f735c065.tar.bz2 |
- fixed lookahead assertions (#10, #11, #12)
- untabified sre_constants.py
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/_sre.c | 25 | ||||
-rw-r--r-- | Modules/sre_constants.h | 57 |
2 files changed, 53 insertions, 29 deletions
diff --git a/Modules/_sre.c b/Modules/_sre.c index 6fcd65e..22b6c73 100644 --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -20,6 +20,7 @@ * 00-06-28 fl fixed findall (0.9.1) * 00-06-29 fl fixed split, added more scanner features (0.9.2) * 00-06-30 fl tuning, fast search (0.9.3) + * 00-06-30 fl added assert (lookahead) primitives (0.9.4) * * Copyright (c) 1997-2000 by Secret Labs AB. All rights reserved. * @@ -30,7 +31,7 @@ #ifndef SRE_RECURSIVE -char copyright[] = " SRE 0.9.3 Copyright (c) 1997-2000 by Secret Labs AB "; +char copyright[] = " SRE 0.9.4 Copyright (c) 1997-2000 by Secret Labs AB "; #include "Python.h" @@ -576,11 +577,10 @@ SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern) pattern += pattern[0]; break; -#if 0 - case SRE_OP_CALL: - /* match subpattern, without backtracking */ + case SRE_OP_ASSERT: + /* assert subpattern */ /* args: <skip> <pattern> */ - TRACE(("%8d: subpattern\n", PTR(ptr))); + TRACE(("%8d: assert subpattern\n", PTR(ptr))); state->ptr = ptr; i = SRE_MATCH(state, pattern + 1); if (i < 0) @@ -588,9 +588,20 @@ SRE_MATCH(SRE_STATE* state, SRE_CODE* pattern) if (!i) goto failure; pattern += pattern[0]; - ptr = state->ptr; break; -#endif + + case SRE_OP_ASSERT_NOT: + /* assert not subpattern */ + /* args: <skip> <pattern> */ + TRACE(("%8d: assert not subpattern\n", PTR(ptr))); + state->ptr = ptr; + i = SRE_MATCH(state, pattern + 1); + if (i < 0) + return i; + if (i) + goto failure; + pattern += pattern[0]; + break; #if 0 case SRE_OP_MAX_REPEAT_ONE: diff --git a/Modules/sre_constants.h b/Modules/sre_constants.h index 01c8448..2ec00ba 100644 --- a/Modules/sre_constants.h +++ b/Modules/sre_constants.h @@ -1,29 +1,42 @@ -/* generated from sre_constants.py */ +/* + * Secret Labs' Regular Expression Engine + * + * regular expression matching engine + * + * NOTE: This file is generated by sre_constants.py. If you need + * to change anything in here, edit sre_constants.py and run it. + * + * Copyright (c) 1997-2000 by Secret Labs AB. All rights reserved. + * + * See the _sre.c file for information on usage and redistribution. + */ + #define SRE_OP_FAILURE 0 #define SRE_OP_SUCCESS 1 #define SRE_OP_ANY 2 #define SRE_OP_ASSERT 3 -#define SRE_OP_AT 4 -#define SRE_OP_BRANCH 5 -#define SRE_OP_CALL 6 -#define SRE_OP_CATEGORY 7 -#define SRE_OP_GROUP 8 -#define SRE_OP_GROUP_IGNORE 9 -#define SRE_OP_IN 10 -#define SRE_OP_IN_IGNORE 11 -#define SRE_OP_INFO 12 -#define SRE_OP_JUMP 13 -#define SRE_OP_LITERAL 14 -#define SRE_OP_LITERAL_IGNORE 15 -#define SRE_OP_MARK 16 -#define SRE_OP_MAX_REPEAT 17 -#define SRE_OP_MAX_REPEAT_ONE 18 -#define SRE_OP_MIN_REPEAT 19 -#define SRE_OP_NOT_LITERAL 20 -#define SRE_OP_NOT_LITERAL_IGNORE 21 -#define SRE_OP_NEGATE 22 -#define SRE_OP_RANGE 23 -#define SRE_OP_REPEAT 24 +#define SRE_OP_ASSERT_NOT 4 +#define SRE_OP_AT 5 +#define SRE_OP_BRANCH 6 +#define SRE_OP_CALL 7 +#define SRE_OP_CATEGORY 8 +#define SRE_OP_GROUP 9 +#define SRE_OP_GROUP_IGNORE 10 +#define SRE_OP_IN 11 +#define SRE_OP_IN_IGNORE 12 +#define SRE_OP_INFO 13 +#define SRE_OP_JUMP 14 +#define SRE_OP_LITERAL 15 +#define SRE_OP_LITERAL_IGNORE 16 +#define SRE_OP_MARK 17 +#define SRE_OP_MAX_REPEAT 18 +#define SRE_OP_MAX_REPEAT_ONE 19 +#define SRE_OP_MIN_REPEAT 20 +#define SRE_OP_NOT_LITERAL 21 +#define SRE_OP_NOT_LITERAL_IGNORE 22 +#define SRE_OP_NEGATE 23 +#define SRE_OP_RANGE 24 +#define SRE_OP_REPEAT 25 #define SRE_AT_BEGINNING 0 #define SRE_AT_BEGINNING_LINE 1 #define SRE_AT_BOUNDARY 2 |