def _extract_functions(self, functions): for line in functions: if line == '': continue start_value, ends = api.split_factory2('->')(line) start, value = helper.de_escape_string( *api.NEW_SPLIT_COMMA(start_value)) end, symbol, movement = helper.de_escape_string( *api.NEW_SPLIT_COMMA(ends)) end = self.states[end] movement = pk.TuringOutputPack.LEFT if movement == 'L' else pk.TuringOutputPack.RIGHT self.states[start].add_function( pk.TuringOutputPack(end, symbol, movement), value)
def test_regexes(self): for regex in rgx.REGEXES.values(): if regex.name == 'VARIABLE': self.assertFalse(regex.check('')) self.assertFalse(regex.check('12')) self.assertFalse(regex.check('12fgt')) self.assertTrue(regex.check('_12')) self.assertTrue(regex.check('_12fht')) self.assertTrue(regex.check('hnefns_')) self.assertTrue(regex.check('_hnefns_')) self.assertTrue(regex.check('_hne_fns_')) self.assertTrue(regex.check('_hn34ef55ns_')) self.assertFalse(regex.check('_hn34ef 55ns_')) elif regex.name == 'INTEGER': self.assertFalse(regex.check('')) self.assertFalse(regex.check('.12')) self.assertFalse(regex.check('95.12')) self.assertFalse(regex.check('95 .12')) self.assertFalse(regex.check('95 12')) self.assertTrue(regex.check('9512')) self.assertTrue(regex.check('1')) elif regex.name == 'FLOAT': self.assertFalse(regex.check('')) self.assertFalse(regex.check('.')) self.assertFalse(regex.check('12')) self.assertFalse(regex.check('12454 .')) self.assertFalse(regex.check('. 12454')) self.assertTrue(regex.check('.12454')) self.assertTrue(regex.check('12454.')) self.assertTrue(regex.check('98.765')) self.assertFalse(regex.check('98.765.456')) self.assertFalse(regex.check('98.765.')) self.assertFalse(regex.check('.98.765')) elif regex.name == 'NUMBER': self.assertFalse(regex.check('')) self.assertFalse(regex.check('.')) self.assertTrue(regex.check('123')) self.assertTrue(regex.check('123.456')) self.assertTrue(regex.check('123.')) self.assertTrue(regex.check('.456')) else: self.assertFalse(regex.check('')) self.assertTrue( regex.check(*hel.de_escape_string(regex._text.lower()))) self.assertFalse( regex.check(*hel.de_escape_string(regex._text.lower() * 2)))
def _extract_functions(self, functions): for line in functions: if line == '': continue start_value, ends = api.split_factory2('->')(line) start, value = helper.de_escape_string( *api.NEW_SPLIT_COMMA(start_value)) for end in api.NEW_SPLIT_COMMA(ends): end = helper.de_escape_string(end)[0] if end != '#': try: self.states[start].add_function( self.states[end], value) except Exception as err: print(self.states, start, end, value) raise err
def _extract_states(self, states, accepted): """ Extracts and packages States from specified lines. :param str states: All States :param str accepted: All accepted states :return: """ accepted_states = api.NEW_SPLIT_COMMA(accepted, remove_empty=True) for state in api.NEW_SPLIT_COMMA(states, remove_empty=True): state_name = helper.de_escape_string(state)[0] # epsilon is format-specific so it should be bound to a specific Generator implementation. state_obj = self.state_imp(state_name, 1 if state in accepted_states else 0) self.states[state_name] = state_obj
def _extract_inputs(self, text): for inp in api.NEW_SPLIT_COMMA(text, remove_empty=True): self.inputs.add(*helper.de_escape_string(inp))
def _extract_start_state(self, start_state): self.start_state = self.states[helper.de_escape_string(start_state)[0]]
def test_escaping(self): self.assertEqual(helper.escape_string('test'), ['\\t\\e\\s\\t']) self.assertEqual(helper.de_escape_string('\\t\\e\\st'), ['test'])