diff --git a/regexp.py b/regexp.py --- a/regexp.py +++ b/regexp.py @@ -419,15 +419,14 @@ class RegexpDFA: combined_alphabet = set(self.alphabet_index.keys()) | set(alphabet_index.keys()) combined_index = {c: i for (i, c) in enumerate(sorted(combined_alphabet))} - conversion_index = {v: combined_index[k] for (k, v) in self.alphabet_index.items()} + conversion_index = {combined_index[k]: v for (k, v) in self.alphabet_index.items()} n2 = len(combined_alphabet) - rules = [] - for i in range(0, len(self.rules), n1): - row = ([m]*n2) - for (j, st) in enumerate(self.rules[i:i+n1]): - row[conversion_index[j]] = st - rules.extend(row) + rules = [ + self.rules[i*n1 + conversion_index[j]] + if j in conversion_index else m + for i in range(m) for j in range(n2) + ] rules.extend([m]*n2) return RegexpDFA(rules, self.end_states, combined_index).reduce().normalize()