forked from Lainports/opnsense-ports
517 lines
16 KiB
Text
517 lines
16 KiB
Text
--- Plex/Lexicons.py.orig 2003-07-08 08:35:31 UTC
|
|
+++ Plex/Lexicons.py
|
|
@@ -8,11 +8,11 @@
|
|
|
|
import types
|
|
|
|
-import Actions
|
|
-import DFA
|
|
-import Errors
|
|
-import Machines
|
|
-import Regexps
|
|
+from . import Actions
|
|
+from . import DFA
|
|
+from . import Errors
|
|
+from . import Machines
|
|
+from . import Regexps
|
|
|
|
# debug_flags for Lexicon constructor
|
|
DUMP_NFA = 1
|
|
@@ -111,10 +111,10 @@ class Lexicon:
|
|
tables = None # StateTableMachine
|
|
|
|
def __init__(self, specifications, debug = None, debug_flags = 7, timings = None):
|
|
- if type(specifications) <> types.ListType:
|
|
+ if type(specifications) != list:
|
|
raise Errors.InvalidScanner("Scanner definition is not a list")
|
|
if timings:
|
|
- from Timing import time
|
|
+ from .Timing import time
|
|
total_time = 0.0
|
|
time1 = time()
|
|
nfa = Machines.Machine()
|
|
@@ -127,7 +127,7 @@ class Lexicon:
|
|
self.add_token_to_machine(
|
|
nfa, user_initial_state, token, token_number)
|
|
token_number = token_number + 1
|
|
- elif type(spec) == types.TupleType:
|
|
+ elif type(spec) == tuple:
|
|
self.add_token_to_machine(
|
|
nfa, default_initial_state, spec, token_number)
|
|
token_number = token_number + 1
|
|
@@ -172,13 +172,13 @@ class Lexicon:
|
|
re.build_machine(machine, initial_state, final_state,
|
|
match_bol = 1, nocase = 0)
|
|
final_state.set_action(action, priority = -token_number)
|
|
- except Errors.PlexError, e:
|
|
+ except Errors.PlexError as e:
|
|
raise e.__class__("Token number %d: %s" % (token_number, e))
|
|
|
|
def parse_token_definition(self, token_spec):
|
|
- if type(token_spec) <> types.TupleType:
|
|
+ if type(token_spec) != tuple:
|
|
raise Errors.InvalidToken("Token definition is not a tuple")
|
|
- if len(token_spec) <> 2:
|
|
+ if len(token_spec) != 2:
|
|
raise Errors.InvalidToken("Wrong number of items in token definition")
|
|
pattern, action = token_spec
|
|
if not isinstance(pattern, Regexps.RE):
|
|
--- Plex/Machines.py.orig 2003-07-08 08:35:31 UTC
|
|
+++ Plex/Machines.py
|
|
@@ -8,12 +8,12 @@
|
|
|
|
import string
|
|
import sys
|
|
-from sys import maxint
|
|
+from sys import maxsize
|
|
from types import TupleType
|
|
|
|
-from Transitions import TransitionMap
|
|
+from .Transitions import TransitionMap
|
|
|
|
-LOWEST_PRIORITY = -sys.maxint
|
|
+LOWEST_PRIORITY = -sys.maxsize
|
|
|
|
class Machine:
|
|
"""A collection of Nodes representing an NFA or DFA."""
|
|
@@ -54,7 +54,7 @@ class Machine:
|
|
file.write("Plex.Machine:\n")
|
|
if self.initial_states is not None:
|
|
file.write(" Initial states:\n")
|
|
- for (name, state) in self.initial_states.items():
|
|
+ for (name, state) in list(self.initial_states.items()):
|
|
file.write(" '%s': %d\n" % (name, state.number))
|
|
for s in self.states:
|
|
s.dump(file)
|
|
@@ -150,13 +150,13 @@ class FastMachine:
|
|
for old_state in old_machine.states:
|
|
new_state = self.new_state()
|
|
old_to_new[old_state] = new_state
|
|
- for name, old_state in old_machine.initial_states.items():
|
|
+ for name, old_state in list(old_machine.initial_states.items()):
|
|
initial_states[name] = old_to_new[old_state]
|
|
for old_state in old_machine.states:
|
|
new_state = old_to_new[old_state]
|
|
- for event, old_state_set in old_state.transitions.items():
|
|
+ for event, old_state_set in list(old_state.transitions.items()):
|
|
if old_state_set:
|
|
- new_state[event] = old_to_new[old_state_set.keys()[0]]
|
|
+ new_state[event] = old_to_new[list(old_state_set.keys())[0]]
|
|
else:
|
|
new_state[event] = None
|
|
new_state['action'] = old_state.action
|
|
@@ -182,7 +182,7 @@ class FastMachine:
|
|
code0, code1 = event
|
|
if code0 == -maxint:
|
|
state['else'] = new_state
|
|
- elif code1 <> maxint:
|
|
+ elif code1 != maxint:
|
|
while code0 < code1:
|
|
state[chr(code0)] = new_state
|
|
code0 = code0 + 1
|
|
@@ -195,7 +195,7 @@ class FastMachine:
|
|
def dump(self, file):
|
|
file.write("Plex.FastMachine:\n")
|
|
file.write(" Initial states:\n")
|
|
- for name, state in self.initial_states.items():
|
|
+ for name, state in list(self.initial_states.items()):
|
|
file.write(" %s: %s\n" % (repr(name), state['number']))
|
|
for state in self.states:
|
|
self.dump_state(state, file)
|
|
@@ -214,7 +214,7 @@ class FastMachine:
|
|
def dump_transitions(self, state, file):
|
|
chars_leading_to_state = {}
|
|
special_to_state = {}
|
|
- for (c, s) in state.items():
|
|
+ for (c, s) in list(state.items()):
|
|
if len(c) == 1:
|
|
chars = chars_leading_to_state.get(id(s), None)
|
|
if chars is None:
|
|
@@ -229,7 +229,7 @@ class FastMachine:
|
|
if char_list:
|
|
ranges = self.chars_to_ranges(char_list)
|
|
ranges_to_state[ranges] = state
|
|
- ranges_list = ranges_to_state.keys()
|
|
+ ranges_list = list(ranges_to_state.keys())
|
|
ranges_list.sort()
|
|
for ranges in ranges_list:
|
|
key = self.ranges_to_string(ranges)
|
|
@@ -256,9 +256,10 @@ class FastMachine:
|
|
return tuple(result)
|
|
|
|
def ranges_to_string(self, range_list):
|
|
- return string.join(map(self.range_to_string, range_list), ",")
|
|
+ return string.join(list(map(self.range_to_string, range_list)), ",")
|
|
|
|
- def range_to_string(self, (c1, c2)):
|
|
+ def range_to_string(self, xxx_todo_changeme):
|
|
+ (c1, c2) = xxx_todo_changeme
|
|
if c1 == c2:
|
|
return repr(c1)
|
|
else:
|
|
--- Plex/Regexps.py.orig 2003-07-08 08:35:31 UTC
|
|
+++ Plex/Regexps.py
|
|
@@ -9,9 +9,9 @@
|
|
import array
|
|
import string
|
|
import types
|
|
-from sys import maxint
|
|
+from sys import maxsize
|
|
|
|
-import Errors
|
|
+from . import Errors
|
|
|
|
#
|
|
# Constants
|
|
@@ -81,9 +81,9 @@ def CodeRanges(code_list):
|
|
an RE which will match a character in any of the ranges.
|
|
"""
|
|
re_list = []
|
|
- for i in xrange(0, len(code_list), 2):
|
|
+ for i in range(0, len(code_list), 2):
|
|
re_list.append(CodeRange(code_list[i], code_list[i + 1]))
|
|
- return apply(Alt, tuple(re_list))
|
|
+ return Alt(*tuple(re_list))
|
|
|
|
def CodeRange(code1, code2):
|
|
"""
|
|
@@ -152,12 +152,12 @@ class RE:
|
|
self.wrong_type(num, value, "Plex.RE instance")
|
|
|
|
def check_string(self, num, value):
|
|
- if type(value) <> type(''):
|
|
+ if type(value) != type(''):
|
|
self.wrong_type(num, value, "string")
|
|
|
|
def check_char(self, num, value):
|
|
self.check_string(num, value)
|
|
- if len(value) <> 1:
|
|
+ if len(value) != 1:
|
|
raise Errors.PlexValueError("Invalid value for argument %d of Plex.%s."
|
|
"Expected a string of length 1, got: %s" % (
|
|
num, self.__class__.__name__, repr(value)))
|
|
@@ -294,7 +294,7 @@ class Seq(RE):
|
|
|
|
def __init__(self, *re_list):
|
|
nullable = 1
|
|
- for i in xrange(len(re_list)):
|
|
+ for i in range(len(re_list)):
|
|
re = re_list[i]
|
|
self.check_re(i, re)
|
|
nullable = nullable and re.nullable
|
|
@@ -319,7 +319,7 @@ class Seq(RE):
|
|
else:
|
|
s1 = initial_state
|
|
n = len(re_list)
|
|
- for i in xrange(n):
|
|
+ for i in range(n):
|
|
if i < n - 1:
|
|
s2 = m.new_state()
|
|
else:
|
|
@@ -330,7 +330,7 @@ class Seq(RE):
|
|
match_bol = re.match_nl or (match_bol and re.nullable)
|
|
|
|
def calc_str(self):
|
|
- return "Seq(%s)" % string.join(map(str, self.re_list), ",")
|
|
+ return "Seq(%s)" % string.join(list(map(str, self.re_list)), ",")
|
|
|
|
|
|
class Alt(RE):
|
|
@@ -369,7 +369,7 @@ class Alt(RE):
|
|
re.build_machine(m, initial_state, final_state, 0, nocase)
|
|
|
|
def calc_str(self):
|
|
- return "Alt(%s)" % string.join(map(str, self.re_list), ",")
|
|
+ return "Alt(%s)" % string.join(list(map(str, self.re_list)), ",")
|
|
|
|
|
|
class Rep1(RE):
|
|
@@ -437,7 +437,7 @@ def Str1(s):
|
|
"""
|
|
Str1(s) is an RE which matches the literal string |s|.
|
|
"""
|
|
- result = apply(Seq, tuple(map(Char, s)))
|
|
+ result = Seq(*tuple(map(Char, s)))
|
|
result.str = "Str(%s)" % repr(s)
|
|
return result
|
|
|
|
@@ -449,8 +449,8 @@ def Str(*strs):
|
|
if len(strs) == 1:
|
|
return Str1(strs[0])
|
|
else:
|
|
- result = apply(Alt, tuple(map(Str1, strs)))
|
|
- result.str = "Str(%s)" % string.join(map(repr, strs), ",")
|
|
+ result = Alt(*tuple(map(Str1, strs)))
|
|
+ result.str = "Str(%s)" % string.join(list(map(repr, strs)), ",")
|
|
return result
|
|
|
|
def Any(s):
|
|
@@ -495,7 +495,7 @@ def Range(s1, s2 = None):
|
|
ranges = []
|
|
for i in range(0, len(s1), 2):
|
|
ranges.append(CodeRange(ord(s1[i]), ord(s1[i+1]) + 1))
|
|
- result = apply(Alt, tuple(ranges))
|
|
+ result = Alt(*tuple(ranges))
|
|
result.str = "Range(%s)" % repr(s1)
|
|
return result
|
|
|
|
--- Plex/Scanners.py.orig 2003-07-08 08:35:31 UTC
|
|
+++ Plex/Scanners.py
|
|
@@ -7,8 +7,8 @@
|
|
#
|
|
#=======================================================================
|
|
|
|
-import Errors
|
|
-from Regexps import BOL, EOL, EOF
|
|
+from . import Errors
|
|
+from .Regexps import BOL, EOL, EOF
|
|
|
|
class Scanner:
|
|
"""
|
|
@@ -122,8 +122,8 @@ class Scanner:
|
|
action = self.run_machine_inlined()
|
|
if action:
|
|
if self.trace:
|
|
- print "Scanner: read: Performing", action, "%d:%d" % (
|
|
- self.start_pos, self.cur_pos)
|
|
+ print("Scanner: read: Performing", action, "%d:%d" % (
|
|
+ self.start_pos, self.cur_pos))
|
|
base = self.buf_start_pos
|
|
text = self.buffer[self.start_pos - base : self.cur_pos - base]
|
|
return (text, action)
|
|
@@ -163,8 +163,8 @@ class Scanner:
|
|
trace = self.trace
|
|
while 1:
|
|
if trace: #TRACE#
|
|
- print "State %d, %d/%d:%s -->" % ( #TRACE#
|
|
- state['number'], input_state, cur_pos, repr(cur_char)), #TRACE#
|
|
+ print("State %d, %d/%d:%s -->" % ( #TRACE#
|
|
+ state['number'], input_state, cur_pos, repr(cur_char)), end=' ') #TRACE#
|
|
# Begin inlined self.save_for_backup()
|
|
#action = state.action #@slow
|
|
action = state['action'] #@fast
|
|
@@ -179,7 +179,7 @@ class Scanner:
|
|
new_state = c and state.get('else') #@fast
|
|
if new_state:
|
|
if trace: #TRACE#
|
|
- print "State %d" % new_state['number'] #TRACE#
|
|
+ print("State %d" % new_state['number']) #TRACE#
|
|
state = new_state
|
|
# Begin inlined: self.next_char()
|
|
if input_state == 1:
|
|
@@ -228,7 +228,7 @@ class Scanner:
|
|
# End inlined self.next_char()
|
|
else: # not new_state
|
|
if trace: #TRACE#
|
|
- print "blocked" #TRACE#
|
|
+ print("blocked") #TRACE#
|
|
# Begin inlined: action = self.back_up()
|
|
if backup_state:
|
|
(action, cur_pos, cur_line, cur_line_start,
|
|
@@ -245,7 +245,7 @@ class Scanner:
|
|
self.next_pos = next_pos
|
|
if trace: #TRACE#
|
|
if action: #TRACE#
|
|
- print "Doing", action #TRACE#
|
|
+ print("Doing", action) #TRACE#
|
|
return action
|
|
|
|
# def transition(self):
|
|
@@ -288,7 +288,7 @@ class Scanner:
|
|
def next_char(self):
|
|
input_state = self.input_state
|
|
if self.trace:
|
|
- print "Scanner: next:", " "*20, "[%d] %d" % (input_state, self.cur_pos),
|
|
+ print("Scanner: next:", " "*20, "[%d] %d" % (input_state, self.cur_pos), end=' ')
|
|
if input_state == 1:
|
|
self.cur_pos = self.next_pos
|
|
c = self.read_char()
|
|
@@ -314,7 +314,7 @@ class Scanner:
|
|
else: # input_state = 5
|
|
self.cur_char = ''
|
|
if self.trace:
|
|
- print "--> [%d] %d %s" % (input_state, self.cur_pos, repr(self.cur_char))
|
|
+ print("--> [%d] %d %s" % (input_state, self.cur_pos, repr(self.cur_char)))
|
|
|
|
# def read_char(self):
|
|
# """
|
|
--- Plex/test_tm.py.orig 2003-07-08 08:35:31 UTC
|
|
+++ Plex/test_tm.py
|
|
@@ -4,14 +4,14 @@ sys.stderr = sys.stdout
|
|
from TransitionMaps import TransitionMap
|
|
|
|
m = TransitionMap()
|
|
-print m
|
|
+print(m)
|
|
|
|
def add(c, s):
|
|
- print
|
|
- print "adding", repr(c), "-->", repr(s)
|
|
+ print()
|
|
+ print("adding", repr(c), "-->", repr(s))
|
|
m.add_transition(c, s)
|
|
- print m
|
|
- print "keys:", m.keys()
|
|
+ print(m)
|
|
+ print("keys:", list(m.keys()))
|
|
|
|
add('a','alpha')
|
|
add('e', 'eta')
|
|
--- Plex/Traditional.py.orig 2003-07-08 08:35:31 UTC
|
|
+++ Plex/Traditional.py
|
|
@@ -6,8 +6,8 @@
|
|
#
|
|
#=======================================================================
|
|
|
|
-from Regexps import *
|
|
-from Errors import PlexError
|
|
+from .Regexps import *
|
|
+from .Errors import PlexError
|
|
|
|
class RegexpSyntaxError(PlexError):
|
|
pass
|
|
@@ -25,7 +25,7 @@ class REParser:
|
|
self.s = s
|
|
self.i = -1
|
|
self.end = 0
|
|
- self.next()
|
|
+ next(self)
|
|
|
|
def parse_re(self):
|
|
re = self.parse_alt()
|
|
@@ -39,9 +39,9 @@ class REParser:
|
|
if self.c == '|':
|
|
re_list = [re]
|
|
while self.c == '|':
|
|
- self.next()
|
|
+ next(self)
|
|
re_list.append(self.parse_seq())
|
|
- re = apply(Alt, tuple(re_list))
|
|
+ re = Alt(*tuple(re_list))
|
|
return re
|
|
|
|
def parse_seq(self):
|
|
@@ -49,7 +49,7 @@ class REParser:
|
|
re_list = []
|
|
while not self.end and not self.c in "|)":
|
|
re_list.append(self.parse_mod())
|
|
- return apply(Seq, tuple(re_list))
|
|
+ return Seq(*tuple(re_list))
|
|
|
|
def parse_mod(self):
|
|
"""Parse a primitive regexp followed by *, +, ? modifiers."""
|
|
@@ -61,7 +61,7 @@ class REParser:
|
|
re = Rep1(re)
|
|
else: # self.c == '?'
|
|
re = Opt(re)
|
|
- self.next()
|
|
+ next(self)
|
|
return re
|
|
|
|
def parse_prim(self):
|
|
@@ -91,16 +91,16 @@ class REParser:
|
|
invert = 0
|
|
if self.c == '^':
|
|
invert = 1
|
|
- self.next()
|
|
+ next(self)
|
|
if self.c == ']':
|
|
char_list.append(']')
|
|
- self.next()
|
|
- while not self.end and self.c <> ']':
|
|
+ next(self)
|
|
+ while not self.end and self.c != ']':
|
|
c1 = self.get()
|
|
- if self.c == '-' and self.lookahead(1) <> ']':
|
|
- self.next()
|
|
+ if self.c == '-' and self.lookahead(1) != ']':
|
|
+ next(self)
|
|
c2 = self.get()
|
|
- for a in xrange(ord(c1), ord(c2) + 1):
|
|
+ for a in range(ord(c1), ord(c2) + 1):
|
|
char_list.append(chr(a))
|
|
else:
|
|
char_list.append(c1)
|
|
@@ -110,7 +110,7 @@ class REParser:
|
|
else:
|
|
return Any(chars)
|
|
|
|
- def next(self):
|
|
+ def __next__(self):
|
|
"""Advance to the next char."""
|
|
s = self.s
|
|
i = self.i = self.i + 1
|
|
@@ -124,7 +124,7 @@ class REParser:
|
|
if self.end:
|
|
self.error("Premature end of string")
|
|
c = self.c
|
|
- self.next()
|
|
+ next(self)
|
|
return c
|
|
|
|
def lookahead(self, n):
|
|
@@ -141,7 +141,7 @@ class REParser:
|
|
Raises an exception otherwise.
|
|
"""
|
|
if self.c == c:
|
|
- self.next()
|
|
+ next(self)
|
|
else:
|
|
self.error("Missing %s" % repr(c))
|
|
|
|
--- Plex/Transitions.py.orig 2007-01-27 02:58:25 UTC
|
|
+++ Plex/Transitions.py
|
|
@@ -7,7 +7,7 @@
|
|
|
|
from copy import copy
|
|
import string
|
|
-from sys import maxint
|
|
+from sys import maxsize
|
|
from types import TupleType
|
|
|
|
class TransitionMap:
|
|
@@ -107,7 +107,7 @@ class TransitionMap:
|
|
result.append(((code0, code1), set))
|
|
code0 = code1
|
|
i = i + 2
|
|
- for event, set in self.special.items():
|
|
+ for event, set in list(self.special.items()):
|
|
if set:
|
|
result.append((event, set))
|
|
return result
|
|
@@ -177,7 +177,7 @@ class TransitionMap:
|
|
map_strs.append(state_set_str(map[i]))
|
|
i = i + 1
|
|
special_strs = {}
|
|
- for event, set in self.special.items():
|
|
+ for event, set in list(self.special.items()):
|
|
special_strs[event] = state_set_str(set)
|
|
return "[%s]+%s" % (
|
|
string.join(map_strs, ","),
|
|
@@ -189,7 +189,7 @@ class TransitionMap:
|
|
def check(self):
|
|
"""Check data structure integrity."""
|
|
if not self.map[-3] < self.map[-1]:
|
|
- print self
|
|
+ print(self)
|
|
assert 0
|
|
|
|
def dump(self, file):
|
|
@@ -199,7 +199,7 @@ class TransitionMap:
|
|
while i < n:
|
|
self.dump_range(map[i], map[i + 2], map[i + 1], file)
|
|
i = i + 2
|
|
- for event, set in self.special.items():
|
|
+ for event, set in list(self.special.items()):
|
|
if set:
|
|
if not event:
|
|
event = 'empty'
|
|
@@ -242,7 +242,7 @@ class TransitionMap:
|
|
# set1[state] = 1
|
|
|
|
def state_set_str(set):
|
|
- state_list = set.keys()
|
|
+ state_list = list(set.keys())
|
|
str_list = []
|
|
for state in state_list:
|
|
str_list.append("S%d" % state.number)
|