mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 03:44:55 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			131 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			131 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#
 | 
						|
# Secret Labs' Regular Expression Engine
 | 
						|
# $Id$
 | 
						|
#
 | 
						|
# various symbols used by the regular expression engine.
 | 
						|
# run this script to update the _sre include files!
 | 
						|
#
 | 
						|
# Copyright (c) 1998-2000 by Secret Labs AB.  All rights reserved.
 | 
						|
#
 | 
						|
# This code can only be used for 1.6 alpha testing.  All other use
 | 
						|
# require explicit permission from Secret Labs AB.
 | 
						|
#
 | 
						|
# Portions of this engine have been developed in cooperation with
 | 
						|
# CNRI.  Hewlett-Packard provided funding for 1.6 integration and
 | 
						|
# other compatibility work.
 | 
						|
#
 | 
						|
 | 
						|
# operators
 | 
						|
 | 
						|
FAILURE = "failure"
 | 
						|
SUCCESS = "success"
 | 
						|
 | 
						|
ANY = "any"
 | 
						|
ASSERT = "assert"
 | 
						|
AT = "at"
 | 
						|
BRANCH = "branch"
 | 
						|
CALL = "call"
 | 
						|
CATEGORY = "category"
 | 
						|
GROUP = "group"
 | 
						|
GROUP_IGNORE = "group_ignore"
 | 
						|
IN = "in"
 | 
						|
IN_IGNORE = "in_ignore"
 | 
						|
JUMP = "jump"
 | 
						|
LITERAL = "literal"
 | 
						|
LITERAL_IGNORE = "literal_ignore"
 | 
						|
MARK = "mark"
 | 
						|
MAX_REPEAT = "max_repeat"
 | 
						|
MAX_REPEAT_ONE = "max_repeat_one"
 | 
						|
MAX_UNTIL = "max_until"
 | 
						|
MIN_REPEAT = "min_repeat"
 | 
						|
MIN_UNTIL = "min_until"
 | 
						|
NEGATE = "negate"
 | 
						|
NOT_LITERAL = "not_literal"
 | 
						|
NOT_LITERAL_IGNORE = "not_literal_ignore"
 | 
						|
RANGE = "range"
 | 
						|
REPEAT = "repeat"
 | 
						|
SUBPATTERN = "subpattern"
 | 
						|
 | 
						|
# positions
 | 
						|
AT_BEGINNING = "at_beginning"
 | 
						|
AT_BOUNDARY = "at_boundary"
 | 
						|
AT_NON_BOUNDARY = "at_non_boundary"
 | 
						|
AT_END = "at_end"
 | 
						|
 | 
						|
# categories
 | 
						|
 | 
						|
CATEGORY_DIGIT = "category_digit"
 | 
						|
CATEGORY_NOT_DIGIT = "category_not_digit"
 | 
						|
CATEGORY_SPACE = "category_space"
 | 
						|
CATEGORY_NOT_SPACE = "category_not_space"
 | 
						|
CATEGORY_WORD = "category_word"
 | 
						|
CATEGORY_NOT_WORD = "category_not_word"
 | 
						|
 | 
						|
CODES = [
 | 
						|
 | 
						|
    # failure=0 success=1 (just because it looks better that way :-)
 | 
						|
    FAILURE, SUCCESS,
 | 
						|
 | 
						|
    ANY,
 | 
						|
    ASSERT,
 | 
						|
    AT,
 | 
						|
    BRANCH,
 | 
						|
    CALL,
 | 
						|
    CATEGORY,
 | 
						|
    GROUP, GROUP_IGNORE,
 | 
						|
    IN, IN_IGNORE,
 | 
						|
    JUMP,
 | 
						|
    LITERAL, LITERAL_IGNORE,
 | 
						|
    MARK,
 | 
						|
    MAX_REPEAT, MAX_UNTIL,
 | 
						|
    MAX_REPEAT_ONE,
 | 
						|
    MIN_REPEAT, MIN_UNTIL,
 | 
						|
    NOT_LITERAL, NOT_LITERAL_IGNORE,
 | 
						|
    NEGATE,
 | 
						|
    RANGE,
 | 
						|
    REPEAT
 | 
						|
 | 
						|
]
 | 
						|
 | 
						|
# convert to dictionary
 | 
						|
c = {}
 | 
						|
i = 0
 | 
						|
for code in CODES:
 | 
						|
    c[code] = i
 | 
						|
    i = i + 1
 | 
						|
CODES = c
 | 
						|
 | 
						|
# replacement operations for "ignore case" mode
 | 
						|
MAP_IGNORE = {
 | 
						|
    GROUP: GROUP_IGNORE,
 | 
						|
    IN: IN_IGNORE,
 | 
						|
    LITERAL: LITERAL_IGNORE,
 | 
						|
    NOT_LITERAL: NOT_LITERAL_IGNORE
 | 
						|
}
 | 
						|
 | 
						|
POSITIONS = {
 | 
						|
    AT_BEGINNING: ord("a"),
 | 
						|
    AT_BOUNDARY: ord("b"),
 | 
						|
    AT_NON_BOUNDARY: ord("B"),
 | 
						|
    AT_END: ord("z"),
 | 
						|
}
 | 
						|
 | 
						|
CATEGORIES = {
 | 
						|
    CATEGORY_DIGIT: ord("d"),
 | 
						|
    CATEGORY_NOT_DIGIT: ord("D"),
 | 
						|
    CATEGORY_SPACE: ord("s"),
 | 
						|
    CATEGORY_NOT_SPACE: ord("S"),
 | 
						|
    CATEGORY_WORD: ord("w"),
 | 
						|
    CATEGORY_NOT_WORD: ord("W"),
 | 
						|
}
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    import string
 | 
						|
    items = CODES.items()
 | 
						|
    items.sort(lambda a, b: cmp(a[1], b[1]))
 | 
						|
    f = open("sre_constants.h", "w")
 | 
						|
    f.write("/* generated by sre_constants.py */\n")
 | 
						|
    for k, v in items:
 | 
						|
	f.write("#define SRE_OP_" + string.upper(k) + " " + str(v) + "\n")
 | 
						|
    f.close()
 | 
						|
    print "done"
 |