Exemple #1
0
    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)
Exemple #2
0
 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)))
Exemple #3
0
    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
Exemple #4
0
    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
Exemple #5
0
    def _extract_inputs(self, text):

        for inp in api.NEW_SPLIT_COMMA(text, remove_empty=True):
            self.inputs.add(*helper.de_escape_string(inp))
Exemple #6
0
 def _extract_start_state(self, start_state):
     self.start_state = self.states[helper.de_escape_string(start_state)[0]]
Exemple #7
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'])