5 # defines the alphabet size, set this to 0x11000 for unicode
8 class Regex(element.Element):
9 # GENERATE ELEMENT(int n_groups) BEGIN
18 element.Element.__init__(
26 element.deserialize_int(n_groups)
27 if isinstance(n_groups, str) else
30 def serialize(self, ref_list):
31 element.Element.serialize(self, ref_list)
32 self.set('n_groups', element.serialize_int(self.n_groups))
33 def deserialize(self, ref_list):
34 element.Element.deserialize(self, ref_list)
35 self.n_groups = element.deserialize_int(self.get('n_groups', '-1'))
36 def copy(self, factory = None):
37 result = element.Element.copy(
39 Regex if factory is None else factory
41 result.n_groups = self.n_groups
43 def repr_serialize(self, params):
44 element.Element.repr_serialize(self, params)
45 if self.n_groups != -1:
47 'n_groups = {0:s}'.format(repr(self.n_groups))
51 self.repr_serialize(params)
52 return 'regex.Regex({0:s})'.format(', '.join(params))
54 def post_process(self, groups, caseless = False):
57 i.post_process(groups, caseless)
58 self.n_groups += i.n_groups
59 def to_nfa_state(self, _nfa, group_ref_data, group_index, next_state):
60 raise NotImplementedError
61 def add_to_nfa(self, _nfa, group_ref_data):
62 _nfa.start_state.append(self.to_nfa_state(_nfa, group_ref_data, 0, 0))
64 class RegexNone(Regex):
65 # GENERATE ELEMENT() BEGIN
82 def copy(self, factory = None):
85 RegexNone if factory is None else factory
90 self.repr_serialize(params)
91 return 'regex.RegexNone({0:s})'.format(', '.join(params))
93 def to_nfa_state(self, _nfa, group_ref_data, group_index, next_state):
96 class RegexEmpty(Regex):
97 # GENERATE ELEMENT() BEGIN
114 def copy(self, factory = None):
117 RegexEmpty if factory is None else factory
122 self.repr_serialize(params)
123 return 'regex.RegexEmpty({0:s})'.format(', '.join(params))
125 def to_nfa_state(self, _nfa, group_ref_data, group_index, next_state):
128 class RegexCharacter(Regex):
129 # GENERATE ELEMENT(list(int) character_set) BEGIN
132 tag = 'RegexCharacter',
147 self.character_set = (
148 [element.deserialize_int(i) for i in character_set.split()]
149 if isinstance(character_set, str) else
152 def serialize(self, ref_list):
153 Regex.serialize(self, ref_list)
156 ' '.join([element.serialize_int(i) for i in self.character_set])
158 def deserialize(self, ref_list):
159 Regex.deserialize(self, ref_list)
160 self.character_set = [
161 element.deserialize_int(i)
162 for i in self.get('character_set', '').split()
164 def copy(self, factory = None):
167 RegexCharacter if factory is None else factory
169 result.character_set = self.character_set
171 def repr_serialize(self, params):
172 Regex.repr_serialize(self, params)
173 if len(self.character_set):
175 'character_set = [{0:s}]'.format(
176 ', '.join([repr(i) for i in self.character_set])
181 self.repr_serialize(params)
182 return 'regex.RegexCharacter({0:s})'.format(', '.join(params))
184 def post_process(self, groups, caseless = False):
185 Regex.post_process(self, groups, caseless)
187 temp = bisect_set.bisect_set_and(
189 [0x41, 0x5b, 0x61, 0x7b]
191 self.character_set = bisect_set.bisect_set_or(
193 [i ^ 0x20 for i in temp if i >= 0x60] +
194 [i ^ 0x20 for i in temp if i < 0x60]
196 def to_nfa_state(self, _nfa, group_ref_data, group_index, next_state):
197 new_state = len(_nfa.states)
199 (nfa.NFA.STATE_CHARACTER, self.character_set, next_state)
203 class RegexCharacterLiteral(RegexCharacter):
204 # GENERATE ELEMENT() BEGIN
207 tag = 'RegexCharacterLiteral',
214 RegexCharacter.__init__(
223 def copy(self, factory = None):
224 result = RegexCharacter.copy(
226 RegexCharacterLiteral if factory is None else factory
231 self.repr_serialize(params)
232 return 'regex.RegexCharacterLiteral({0:s})'.format(', '.join(params))
234 def post_process(self, groups, caseless = False):
235 RegexCharacter.post_process(self, groups, False)
237 temp = bisect_set.bisect_set_and(
239 [0x41, 0x5b, 0x61, 0x7b]
241 self.character_set = bisect_set.bisect_set_or(
243 [i ^ 0x20 for i in temp if i >= 0x60] +
244 [i ^ 0x20 for i in temp if i < 0x60]
247 class RegexCharacterRange(RegexCharacter):
248 # GENERATE ELEMENT() BEGIN
251 tag = 'RegexCharacterRange',
258 RegexCharacter.__init__(
267 def copy(self, factory = None):
268 result = RegexCharacter.copy(
270 RegexCharacterRange if factory is None else factory
275 self.repr_serialize(params)
276 return 'regex.RegexCharacterRange({0:s})'.format(', '.join(params))
278 def post_process(self, groups, caseless = False):
279 RegexCharacter.post_process(self, groups, False)
280 self.character_set = [self[0].character_set[0], self[1].character_set[-1]]
282 temp = bisect_set.bisect_set_and(
284 [0x41, 0x5b, 0x61, 0x7b]
286 self.character_set = bisect_set.bisect_set_or(
288 [i ^ 0x20 for i in temp if i >= 0x60] +
289 [i ^ 0x20 for i in temp if i < 0x60]
292 class RegexCharacterOr(RegexCharacter):
293 # GENERATE ELEMENT() BEGIN
296 tag = 'RegexCharacterOr',
303 RegexCharacter.__init__(
312 def copy(self, factory = None):
313 result = RegexCharacter.copy(
315 RegexCharacterOr if factory is None else factory
320 self.repr_serialize(params)
321 return 'regex.RegexCharacterOr({0:s})'.format(', '.join(params))
323 def post_process(self, groups, caseless = False):
324 RegexCharacter.post_process(self, groups, caseless)
325 self.character_set = bisect_set.bisect_set_or(
326 self[0].character_set,
327 self[1].character_set
330 class RegexCharacterAnd(RegexCharacter):
331 # GENERATE ELEMENT() BEGIN
334 tag = 'RegexCharacterAnd',
341 RegexCharacter.__init__(
350 def copy(self, factory = None):
351 result = RegexCharacter.copy(
353 RegexCharacterAnd if factory is None else factory
358 self.repr_serialize(params)
359 return 'regex.RegexCharacterAnd({0:s})'.format(', '.join(params))
361 def post_process(self, groups, caseless = False):
362 RegexCharacter.post_process(self, groups, caseless)
363 self.character_set = bisect_set.bisect_set_and(
364 self[0].character_set,
365 self[1].character_set
368 class RegexCharacterNot(RegexCharacter):
369 # GENERATE ELEMENT() BEGIN
372 tag = 'RegexCharacterNot',
379 RegexCharacter.__init__(
388 def copy(self, factory = None):
389 result = RegexCharacter.copy(
391 RegexCharacterNot if factory is None else factory
396 self.repr_serialize(params)
397 return 'regex.RegexCharacterNot({0:s})'.format(', '.join(params))
399 def post_process(self, groups, caseless = False):
400 RegexCharacter.post_process(self, groups, caseless)
401 self.character_set = bisect_set.bisect_set_not(self[0].character_set)
403 class RegexOr(Regex):
404 # GENERATE ELEMENT() BEGIN
421 def copy(self, factory = None):
424 RegexOr if factory is None else factory
429 self.repr_serialize(params)
430 return 'regex.RegexOr({0:s})'.format(', '.join(params))
432 def to_nfa_state(self, _nfa, group_ref_data, group_index, next_state):
433 child0_state = self[0].to_nfa_state(
439 child1_state = self[1].to_nfa_state(
442 group_index + self[0].n_groups,
445 if child0_state == -1:
447 if child1_state == -1:
449 new_state = len(_nfa.states)
450 _nfa.states.append((nfa.NFA.STATE_OR, child0_state, child1_state))
453 class RegexAnd(Regex):
454 # GENERATE ELEMENT() BEGIN
471 def copy(self, factory = None):
474 RegexAnd if factory is None else factory
479 self.repr_serialize(params)
480 return 'regex.RegexAnd({0:s})'.format(', '.join(params))
482 def to_nfa_state(self, _nfa, group_ref_data, group_index, next_state):
483 join0_state = len(_nfa.states)
484 _nfa.states.append(nfa.NFA.join0_state) # no arguments so use static one
485 join1_state = len(_nfa.states)
486 _nfa.states.append((nfa.NFA.STATE_JOIN1, next_state))
487 child0_state = self[0].to_nfa_state(
493 if child0_state == -1:
495 child1_state = self[1].to_nfa_state(
498 group_index + self[0].n_groups,
501 if child1_state == -1:
503 new_state = len(_nfa.states)
504 _nfa.states.append((nfa.NFA.STATE_AND, child0_state, child1_state))
507 class RegexSequence(Regex):
508 # GENERATE ELEMENT() BEGIN
511 tag = 'RegexSequence',
525 def copy(self, factory = None):
528 RegexSequence if factory is None else factory
533 self.repr_serialize(params)
534 return 'regex.RegexSequence({0:s})'.format(', '.join(params))
536 def to_nfa_state(self, _nfa, group_ref_data, group_index, next_state):
537 next_state = self[1].to_nfa_state(
540 group_index + self[0].n_groups,
545 return self[0].to_nfa_state(
552 class RegexRepeat(Regex):
553 # GENERATE ELEMENT(int count0, int count1, bool non_greedy) BEGIN
574 element.deserialize_int(count0)
575 if isinstance(count0, str) else
579 element.deserialize_int(count1)
580 if isinstance(count1, str) else
584 element.deserialize_bool(non_greedy)
585 if isinstance(non_greedy, str) else
588 def serialize(self, ref_list):
589 Regex.serialize(self, ref_list)
590 self.set('count0', element.serialize_int(self.count0))
591 self.set('count1', element.serialize_int(self.count1))
592 self.set('non_greedy', element.serialize_bool(self.non_greedy))
593 def deserialize(self, ref_list):
594 Regex.deserialize(self, ref_list)
595 self.count0 = element.deserialize_int(self.get('count0', '-1'))
596 self.count1 = element.deserialize_int(self.get('count1', '-1'))
597 self.non_greedy = element.deserialize_bool(self.get('non_greedy', 'false'))
598 def copy(self, factory = None):
601 RegexRepeat if factory is None else factory
603 result.count0 = self.count0
604 result.count1 = self.count1
605 result.non_greedy = self.non_greedy
607 def repr_serialize(self, params):
608 Regex.repr_serialize(self, params)
609 if self.count0 != -1:
611 'count0 = {0:s}'.format(repr(self.count0))
613 if self.count1 != -1:
615 'count1 = {0:s}'.format(repr(self.count1))
617 if self.non_greedy != False:
619 'non_greedy = {0:s}'.format(repr(self.non_greedy))
623 self.repr_serialize(params)
624 return 'regex.RegexRepeat({0:s})'.format(', '.join(params))
626 def post_process(self, groups, caseless = False):
627 # total hack which will be done in a Python action in future
629 assert self[1].tag == 'Number'
630 self.count0 = int(self[1].text)
632 assert self[2].tag == 'Number'
633 self.count1 = int(self[2].text)
635 self.count1 = self.count0
638 Regex.post_process(self, groups, caseless)
639 def to_nfa_state(self, _nfa, group_ref_data, group_index, next_state):
643 new_state = len(_nfa.states)
644 _nfa.states.append(None)
645 child_state = self[0].to_nfa_state(
651 if child_state != -1:
652 _nfa.states[new_state] = (
653 (nfa.NFA.STATE_OR, next_state, child_state)
654 if self.non_greedy else
655 (nfa.NFA.STATE_OR, child_state, next_state)
657 next_state = new_state
659 done_state = next_state
660 for i in range(count1 - count0):
661 child_state = self[0].to_nfa_state(
667 if child_state == -1:
669 new_state = len(_nfa.states)
671 (nfa.NFA.STATE_OR, done_state, child_state)
672 if self.non_greedy else
673 (nfa.NFA.STATE_OR, child_state, done_state)
675 next_state = new_state
676 for i in range(count0):
677 next_state = self[0].to_nfa_state(
687 class RegexGroup(Regex):
688 # GENERATE ELEMENT() BEGIN
705 def copy(self, factory = None):
708 RegexGroup if factory is None else factory
713 self.repr_serialize(params)
714 return 'regex.RegexGroup({0:s})'.format(', '.join(params))
716 def post_process(self, groups, caseless = False):
717 # we use -1 here because named or action groups use self[0] for text
719 self[-1].post_process(groups, caseless)
720 self.n_groups = self[-1].n_groups + 1
721 def to_nfa_state(self, _nfa, group_ref_data, group_index, next_state):
722 new_state = len(_nfa.states)
724 (nfa.NFA.STATE_MARK, group_ref_data[group_index][1], next_state)
726 next_state = new_state
727 next_state = self[-1].to_nfa_state(
735 new_state = len(_nfa.states)
737 (nfa.NFA.STATE_MARK, group_ref_data[group_index][0], next_state)
741 # internal base class
742 class Text(element.Element):
743 # GENERATE ELEMENT() BEGIN
751 element.Element.__init__(
758 def copy(self, factory = None):
759 result = element.Element.copy(
761 Text if factory is None else factory
766 self.repr_serialize(params)
767 return 'regex.Text({0:s})'.format(', '.join(params))
770 return element.get_text(self, 0)
772 class RegexGroupName(RegexGroup):
774 # GENERATE ELEMENT() BEGIN
777 tag = 'RegexGroupName_Text',
789 def copy(self, factory = None):
792 Text if factory is None else factory
797 self.repr_serialize(params)
798 return 'regex.RegexGroupName.Text({0:s})'.format(', '.join(params))
801 # GENERATE ELEMENT() BEGIN
804 tag = 'RegexGroupName',
818 def copy(self, factory = None):
819 result = RegexGroup.copy(
821 RegexGroupName if factory is None else factory
826 self.repr_serialize(params)
827 return 'regex.RegexGroupName({0:s})'.format(', '.join(params))
830 class RegexGroupAction(RegexGroup):
832 # GENERATE ELEMENT() BEGIN
835 tag = 'RegexGroupAction_Text',
847 def copy(self, factory = None):
850 Text if factory is None else factory
855 self.repr_serialize(params)
856 return 'regex.RegexGroupAction.Text({0:s})'.format(', '.join(params))
859 # GENERATE ELEMENT() BEGIN
862 tag = 'RegexGroupAction',
876 def copy(self, factory = None):
877 result = RegexGroup.copy(
879 RegexGroupAction if factory is None else factory
884 self.repr_serialize(params)
885 return 'regex.RegexGroupAction({0:s})'.format(', '.join(params))
888 class RegexGroupElement(RegexGroup):
890 # GENERATE ELEMENT() BEGIN
893 tag = 'RegexGroupElement_Text',
905 def copy(self, factory = None):
908 Text if factory is None else factory
913 self.repr_serialize(params)
914 return 'regex.RegexGroupElement.Text({0:s})'.format(', '.join(params))
917 # GENERATE ELEMENT() BEGIN
920 tag = 'RegexGroupElement',
934 def copy(self, factory = None):
935 result = RegexGroup.copy(
937 RegexGroupElement if factory is None else factory
942 self.repr_serialize(params)
943 return 'regex.RegexGroupElement({0:s})'.format(', '.join(params))
946 # GENERATE FACTORY(element.Element) BEGIN
949 'RegexNone': RegexNone,
950 'RegexEmpty': RegexEmpty,
951 'RegexCharacter': RegexCharacter,
952 'RegexCharacterLiteral': RegexCharacterLiteral,
953 'RegexCharacterRange': RegexCharacterRange,
954 'RegexCharacterOr': RegexCharacterOr,
955 'RegexCharacterAnd': RegexCharacterAnd,
956 'RegexCharacterNot': RegexCharacterNot,
958 'RegexAnd': RegexAnd,
959 'RegexSequence': RegexSequence,
960 'RegexRepeat': RegexRepeat,
961 'RegexGroup': RegexGroup,
963 'RegexGroupName': RegexGroupName,
964 'RegexGroupName_Text': RegexGroupName.Text,
965 'RegexGroupAction': RegexGroupAction,
966 'RegexGroupAction_Text': RegexGroupAction.Text,
967 'RegexGroupElement': RegexGroupElement,
968 'RegexGroupElement_Text': RegexGroupElement.Text
970 def factory(tag, attrib = {}, *args, **kwargs):
971 return tag_to_class.get(tag, element.Element)(tag, attrib, *args, **kwargs)
974 if __name__ == '__main__':
976 import xml.etree.ElementTree
985 RegexCharacterLiteral()
987 character_set = [0, 256]
1006 RegexCharacterLiteral(
1007 character_set = [9, 14, 32, 33]
1022 RegexCharacterLiteral(
1023 character_set = [48, 58]
1045 RegexCharacterLiteral(
1046 character_set = [102, 103]
1050 RegexCharacterLiteral(
1051 character_set = [111, 112]
1055 RegexCharacterLiteral(
1056 character_set = [114, 115]
1062 RegexCharacterLiteral(
1063 character_set = [101, 102]
1081 RegexCharacterLiteral(
1082 character_set = [65, 91, 95, 96, 97, 123]
1086 RegexCharacterLiteral(
1087 character_set = [48, 58, 65, 91, 95, 96, 97, 123]
1105 wrap_repr.wrap_repr(
1106 ' _regex = {0:s}'.format(repr(_regex).replace('regex.', '')),
1112 _regex.add_to_nfa(_nfa)
1114 wrap_repr.wrap_repr(
1115 ' _nfa = {0:s}'.format(repr(_nfa).replace('nfa.', '')),
1120 text = ' id 99id id99 for fore foree forex '
1122 while i < len(text):
1123 print('text "{0:s}"'.format(text[i:i + 72].replace('\n', '$')))
1124 thread = _nfa.match_text(text, i)
1128 i = thread[0] # end position of overall match
1129 group_start = [-1 for j in range(len(_nfa.groups))]
1130 group_end = [-1 for j in range(len(_nfa.groups))]
1131 while thread is not None:
1132 pos, mark, thread = thread
1135 group_start[group] = pos
1137 'group {0:d} name "{1:s}" text "{2:s}"'.format(
1139 _nfa.groups[group][0],
1140 text[group_start[group]:group_end[group]].replace('\n', '$')
1144 group_end[group] = pos
1146 _dfa = _nfa.to_dfa()
1148 wrap_repr.wrap_repr(
1149 ' _dfa = {0:s}'.format(repr(_dfa).replace('dfa.', '')),
1154 text = ' id 99id id99 for fore foree forex '
1156 while i < len(text):
1157 print('text "{0:s}"'.format(text[i:i + 72].replace('\n', '$')))
1158 thread = _dfa.match_text(text, i)
1162 i = thread[0] # end position of overall match
1163 group_start = [-1 for j in range(len(_dfa.groups))]
1164 group_end = [-1 for j in range(len(_dfa.groups))]
1165 while thread is not None:
1166 pos, mark, thread = thread
1169 group_start[group] = pos
1171 'group {0:d} name "{1:s}" text "{2:s}"'.format(
1173 _dfa.groups[group][0],
1174 text[group_start[group]:group_end[group]].replace('\n', '$')
1178 group_end[group] = pos
1180 # move this into grammar.py:
1181 # grammar = Grammar(children = [Grammar.Production(children = [RegexSequence(
1182 #children = [RegexSequence(children = [RegexEmpty(), RegexCharacterRule(character_set
1183 #= [288, 295], rule_name = 'whitespace_opt')]), RegexCharacterRule(character_set = [
1184 #259, 262], rule_name = 'expr0')])], nonterminal = 0), Grammar.Production(
1185 #children = [RegexSequence(children = [RegexEmpty(), RegexCharacterRule(character_set
1186 #= [262, 265], rule_name = 'expr1')])], nonterminal = 1), Grammar.Production(
1187 #children = [RegexSequence(children = [RegexEmpty(), RegexGroup(children = [
1188 #RegexSequence(children = [RegexSequence(children = [RegexSequence(children = [
1189 #RegexSequence(children = [RegexEmpty(), RegexCharacterRule(character_set = [259, 262
1190 #], rule_name = 'expr0')]), RegexCharacter(character_set = [43, 44])]),
1191 #RegexCharacterRule(character_set = [288, 295], rule_name = 'whitespace_opt')]),
1192 #RegexCharacterRule(character_set = [262, 265], rule_name = 'expr1')])], group_index
1193 #= 0, group_name = 'Add')])], nonterminal = 2), Grammar.Production(children = [
1194 #RegexSequence(children = [RegexEmpty(), RegexGroup(children = [RegexSequence(
1195 #children = [RegexSequence(children = [RegexSequence(children = [RegexSequence(
1196 #children = [RegexEmpty(), RegexCharacterRule(character_set = [259, 262], rule_name =
1197 #'expr0')]), RegexCharacter(character_set = [45, 46])]), RegexCharacterRule(character_set
1198 #= [288, 295], rule_name = 'whitespace_opt')]), RegexCharacterRule(character_set = [
1199 #262, 265], rule_name = 'expr1')])], group_index = 0, group_name = 'Subtract')])
1200 #], nonterminal = 3), Grammar.Production(children = [RegexSequence(children = [
1201 #RegexEmpty(), RegexCharacterRule(character_set = [265, 268], rule_name = 'expr2')])
1202 #], nonterminal = 4), Grammar.Production(children = [RegexSequence(children = [
1203 #RegexEmpty(), RegexGroup(children = [RegexSequence(children = [RegexSequence(
1204 #children = [RegexSequence(children = [RegexSequence(children = [RegexEmpty(),
1205 #RegexCharacterRule(character_set = [262, 265], rule_name = 'expr1')]),
1206 #RegexCharacter(character_set = [42, 43])]), RegexCharacterRule(character_set = [288, 295
1207 #], rule_name = 'whitespace_opt')]), RegexCharacterRule(character_set = [265, 268],
1208 #rule_name = 'expr2')])], group_index = 0, group_name = 'Multiply')])],
1209 #nonterminal = 5), Grammar.Production(children = [RegexSequence(children = [
1210 #RegexEmpty(), RegexGroup(children = [RegexSequence(children = [RegexSequence(
1211 #children = [RegexSequence(children = [RegexSequence(children = [RegexEmpty(),
1212 #RegexCharacterRule(character_set = [262, 265], rule_name = 'expr1')]),
1213 #RegexCharacter(character_set = [47, 48])]), RegexCharacterRule(character_set = [288, 295
1214 #], rule_name = 'whitespace_opt')]), RegexCharacterRule(character_set = [265, 268],
1215 #rule_name = 'expr2')])], group_index = 0, group_name = 'Divide')])],
1216 #nonterminal = 6), Grammar.Production(children = [RegexSequence(children = [
1217 #RegexSequence(children = [RegexEmpty(), RegexGroup(children = [RegexSequence(
1218 #children = [RegexEmpty(), RegexCharacterRule(character_set = [268, 288], rule_name =
1219 #'number')])], group_index = 0, group_name = 'Number')]), RegexCharacterRule(
1220 #character_set = [288, 295], rule_name = 'whitespace_opt')])], nonterminal = 7),
1221 #Grammar.Production(children = [RegexSequence(children = [RegexEmpty(),
1222 #RegexGroup(children = [RegexSequence(children = [RegexSequence(children = [
1223 #RegexSequence(children = [RegexEmpty(), RegexCharacter(character_set = [45, 46])]),
1224 #RegexCharacterRule(character_set = [288, 295], rule_name = 'whitespace_opt')]),
1225 #RegexCharacterRule(character_set = [265, 268], rule_name = 'expr2')])], group_index
1226 #= 0, group_name = 'Negate')])], nonterminal = 8), Grammar.Production(children =
1227 #[RegexSequence(children = [RegexSequence(children = [RegexSequence(children = [
1228 #RegexSequence(children = [RegexSequence(children = [RegexEmpty(),
1229 #RegexCharacter(character_set = [40, 41])]), RegexCharacterRule(character_set = [288, 295
1230 #], rule_name = 'whitespace_opt')]), RegexCharacterRule(character_set = [259, 262],
1231 #rule_name = 'expr0')]), RegexCharacter(character_set = [41, 42])]),
1232 #RegexCharacterRule(character_set = [288, 295], rule_name = 'whitespace_opt')])],
1233 #nonterminal = 9), Grammar.Production(children = [RegexSequence(children = [
1234 #RegexEmpty(), RegexCharacter(character_set = [48, 49])])], nonterminal = 10),
1235 #Grammar.Production(children = [RegexSequence(children = [RegexEmpty(),
1236 #RegexCharacter(character_set = [49, 50])])], nonterminal = 11), Grammar.Production(
1237 #children = [RegexSequence(children = [RegexEmpty(), RegexCharacter(character_set = [
1238 #50, 51])])], nonterminal = 12), Grammar.Production(children = [RegexSequence(
1239 #children = [RegexEmpty(), RegexCharacter(character_set = [51, 52])])], nonterminal =
1240 #13), Grammar.Production(children = [RegexSequence(children = [RegexEmpty(),
1241 #RegexCharacter(character_set = [52, 53])])], nonterminal = 14), Grammar.Production(
1242 #children = [RegexSequence(children = [RegexEmpty(), RegexCharacter(character_set = [
1243 #53, 54])])], nonterminal = 15), Grammar.Production(children = [RegexSequence(
1244 #children = [RegexEmpty(), RegexCharacter(character_set = [54, 55])])], nonterminal =
1245 #16), Grammar.Production(children = [RegexSequence(children = [RegexEmpty(),
1246 #RegexCharacter(character_set = [55, 56])])], nonterminal = 17), Grammar.Production(
1247 #children = [RegexSequence(children = [RegexEmpty(), RegexCharacter(character_set = [
1248 #56, 57])])], nonterminal = 18), Grammar.Production(children = [RegexSequence(
1249 #children = [RegexEmpty(), RegexCharacter(character_set = [57, 58])])], nonterminal =
1250 #19), Grammar.Production(children = [RegexSequence(children = [RegexSequence(
1251 #children = [RegexEmpty(), RegexCharacterRule(character_set = [268, 288], rule_name =
1252 #'number')]), RegexCharacter(character_set = [48, 49])])], nonterminal = 20),
1253 #Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
1254 #= [RegexEmpty(), RegexCharacterRule(character_set = [268, 288], rule_name = 'number'
1255 #)]), RegexCharacter(character_set = [49, 50])])], nonterminal = 21),
1256 #Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
1257 #= [RegexEmpty(), RegexCharacterRule(character_set = [268, 288], rule_name = 'number'
1258 #)]), RegexCharacter(character_set = [50, 51])])], nonterminal = 22),
1259 #Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
1260 #= [RegexEmpty(), RegexCharacterRule(character_set = [268, 288], rule_name = 'number'
1261 #)]), RegexCharacter(character_set = [51, 52])])], nonterminal = 23),
1262 #Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
1263 #= [RegexEmpty(), RegexCharacterRule(character_set = [268, 288], rule_name = 'number'
1264 #)]), RegexCharacter(character_set = [52, 53])])], nonterminal = 24),
1265 #Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
1266 #= [RegexEmpty(), RegexCharacterRule(character_set = [268, 288], rule_name = 'number'
1267 #)]), RegexCharacter(character_set = [53, 54])])], nonterminal = 25),
1268 #Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
1269 #= [RegexEmpty(), RegexCharacterRule(character_set = [268, 288], rule_name = 'number'
1270 #)]), RegexCharacter(character_set = [54, 55])])], nonterminal = 26),
1271 #Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
1272 #= [RegexEmpty(), RegexCharacterRule(character_set = [268, 288], rule_name = 'number'
1273 #)]), RegexCharacter(character_set = [55, 56])])], nonterminal = 27),
1274 #Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
1275 #= [RegexEmpty(), RegexCharacterRule(character_set = [268, 288], rule_name = 'number'
1276 #)]), RegexCharacter(character_set = [56, 57])])], nonterminal = 28),
1277 #Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
1278 #= [RegexEmpty(), RegexCharacterRule(character_set = [268, 288], rule_name = 'number'
1279 #)]), RegexCharacter(character_set = [57, 58])])], nonterminal = 29),
1280 #Grammar.Production(children = [RegexEmpty()], nonterminal = 30),
1281 #Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
1282 #= [RegexEmpty(), RegexCharacterRule(character_set = [288, 295], rule_name =
1283 #'whitespace_opt')]), RegexCharacter(character_set = [9, 10])])], nonterminal = 31),
1284 #Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
1285 #= [RegexEmpty(), RegexCharacterRule(character_set = [288, 295], rule_name =
1286 #'whitespace_opt')]), RegexCharacter(character_set = [10, 11])])], nonterminal = 32),
1287 #Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
1288 #= [RegexEmpty(), RegexCharacterRule(character_set = [288, 295], rule_name =
1289 #'whitespace_opt')]), RegexCharacter(character_set = [11, 12])])], nonterminal = 33),
1290 #Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
1291 #= [RegexEmpty(), RegexCharacterRule(character_set = [288, 295], rule_name =
1292 #'whitespace_opt')]), RegexCharacter(character_set = [12, 13])])], nonterminal = 34),
1293 #Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
1294 #= [RegexEmpty(), RegexCharacterRule(character_set = [288, 295], rule_name =
1295 #'whitespace_opt')]), RegexCharacter(character_set = [13, 14])])], nonterminal = 35),
1296 #Grammar.Production(children = [RegexSequence(children = [RegexSequence(children
1297 #= [RegexEmpty(), RegexCharacterRule(character_set = [288, 295], rule_name =
1298 #'whitespace_opt')]), RegexCharacter(character_set = [32, 33])])], nonterminal = 36)
1299 #], n_terminals = 258)
1300 # #sys.stdout.write(
1301 # # wrap_repr.wrap_repr(
1302 # # ' grammar = {0:s}'.format(repr(grammar).replace('regex.', '')),
1307 # lr1 = grammar.to_lr1()
1308 # #sys.stdout.write(
1309 # # wrap_repr.wrap_repr(
1310 # # ' lr1 = {0:s}'.format(repr(lr1).replace('regex.', '')),
1315 # lr1.parse_text('(13 + 5 * 6) * 2', 0)
1316 # root = element.Element('root', text = '(13 + 5 * 6) * 2')
1317 # lr1.parse_yychunk(root, 0, 0, element.Element, iter([]))
1318 # xml.etree.ElementTree.dump(root)
1320 # clr1 = lr1.to_clr1()
1321 # #sys.stdout.write(
1322 # # wrap_repr.wrap_repr(
1323 # # ' clr1 = {0:s}'.format(repr(clr1).replace('regex.', '')),
1328 # clr1.parse_text('(13 + 5 * 6) * 2', 0)
1329 # root = element.Element('root', text = '(13 + 5 * 6) * 2')
1330 # clr1.parse_yychunk(root, 0, 0, element.Element, iter([]))
1331 # xml.etree.ElementTree.dump(root)
1333 # lalr1 = lr1.to_lalr1()
1334 # #sys.stdout.write(
1335 # # wrap_repr.wrap_repr(
1336 # # ' lalr1 = {0:s}'.format(repr(lalr1).replace('regex.', '')),
1341 # lalr1.parse_text('(13 + 5 * 6) * 2', 0)
1342 # root = element.Element('root', text = '(13 + 5 * 6) * 2')
1343 # lalr1.parse_yychunk(root, 0, 0, element.Element, iter([]))
1344 # xml.etree.ElementTree.dump(root)