- fixed lookahead assertions (#10, #11, #12)

- untabified sre_constants.py
This commit is contained in:
Fredrik Lundh 2000-06-30 10:41:31 +00:00
parent a4657f736c
commit 43b3b49b5a
6 changed files with 146 additions and 90 deletions

View file

@ -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:

View file

@ -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