Ejemplo n.º 1
0
def parse_elements(rulename, elements):
    machine = StateMachine(rulename)
    machine_start = State(START_STATE)
    machine_end = State(FINAL_STATE)

    elements = elements_splitter.split_into_tokens(elements)
    start_edges, end_states, states = recursive_parse_elements(elements)

    for state in states:
        machine.add_state(state)
    for start_edge in start_edges:
        machine_start.add_edge(start_edge)
    for end_state in end_states:
        end_state.add_edge(Edge('', FINAL_STATE))

    machine.add_state(machine_start)
    machine.add_state(machine_end)

    return machine
 def test_ending_quoted_elements(self):
     elements = 'abc def ghi "jkl mno"'
     expected = ['abc', 'def', 'ghi', '"jkl mno"']
     self.assertEqual(elements_splitter.split_into_tokens(elements), expected)
 def test_starting_quoted_elements(self):
     elements = '"abc def" ghi jkl mno'
     expected = ['"abc def"', 'ghi', 'jkl', 'mno']
     self.assertEqual(elements_splitter.split_into_tokens(elements), expected)
 def test_nested_bracketed_elements(self):
     elements = 'abc def [ghi [jkl mno] pqr] stu'
     expected = ['abc', 'def', ['[', 'ghi', ['[', 'jkl', 'mno', ']'], 'pqr', ']'], 'stu']
     self.assertEqual(elements_splitter.split_into_tokens(elements), expected)
 def test_single_multipart_bracketed_element(self):
     elements = '[abc def]'
     expected = [['[', 'abc', 'def', ']']]
     self.assertEqual(elements_splitter.split_into_tokens(elements), expected)
 def test_bracketed_elements(self):
     elements = 'abc def [ghi jkl] mno'
     expected = ['abc', 'def', ['[', 'ghi', 'jkl', ']'], 'mno']
     self.assertEqual(elements_splitter.split_into_tokens(elements), expected)
 def test_starting_parenthetized_elements(self):
     elements = '((abc def) ghi) jkl mno pqr stu'
     expected = [[['abc', 'def'], 'ghi'], 'jkl', 'mno', 'pqr', 'stu']
     self.assertEqual(elements_splitter.split_into_tokens(elements), expected)
 def test_single_nested_multipart_parenthetized_element(self):
     elements = '(((abc def)))'
     expected = [[[['abc', 'def']]]]
     self.assertEqual(elements_splitter.split_into_tokens(elements), expected)
 def test_N_repetition_with_parentheses(self):
     elements = '10(abc def)'
     expected = [['10', ['abc', 'def']]]
     self.assertEqual(elements_splitter.split_into_tokens(elements), expected)
 def test_N_minus_repetition(self):
     elements = '*5abc'
     expected = [['*5', 'abc']]
     self.assertEqual(elements_splitter.split_into_tokens(elements), expected)
 def test_single_elements(self):
     elements = 'abc'
     self.assertEqual(elements_splitter.split_into_tokens(elements), ['abc'])
 def test_single_multipart_bracketed_element_with_parentheses(self):
     elements = '[abc (def ghi)]'
     expected = [['[', 'abc', ['def', 'ghi'], ']']]
     self.assertEqual(elements_splitter.split_into_tokens(elements), expected)
 def test_ending_bracketed_elements(self):
     elements = 'abc def ghi jkl [[mno pqr] stu]'
     expected = ['abc', 'def', 'ghi', 'jkl', ['[', ['[', 'mno', 'pqr', ']'], 'stu', ']']]
     self.assertEqual(elements_splitter.split_into_tokens(elements), expected)
 def test_starting_bracketed_elements(self):
     elements = '[[abc def] ghi] jkl mno pqr stu'
     expected = [['[', ['[', 'abc', 'def', ']'], 'ghi', ']'], 'jkl', 'mno', 'pqr', 'stu']
     self.assertEqual(elements_splitter.split_into_tokens(elements), expected)
 def test_parenthetized_elements(self):
     elements = 'abc def (ghi jkl) mno'
     expected = ['abc', 'def', ['ghi', 'jkl'], 'mno']
     self.assertEqual(elements_splitter.split_into_tokens(elements), expected)
 def test_single_parenthetized_element(self):
     elements = '(abc)'
     expected = [['abc']]
     self.assertEqual(elements_splitter.split_into_tokens(elements), expected)
 def test_multi_or(self):
     elements = 'abc / def / ghi'
     expected = ['abc', '/', 'def', '/', 'ghi']
     self.assertEqual(elements_splitter.split_into_tokens(elements), expected)
 def test_nested_parenthetized_elements(self):
     elements = 'abc def (ghi (jkl mno) pqr) stu'
     expected = ['abc', 'def', ['ghi', ['jkl', 'mno'], 'pqr'], 'stu']
     self.assertEqual(elements_splitter.split_into_tokens(elements), expected)
 def test_parenthetized_or(self):
     elements = 'abc / (def / ghi)'
     expected = ['abc', '/', ['def', '/', 'ghi']]
     self.assertEqual(elements_splitter.split_into_tokens(elements), expected)
 def test_ending_parenthetized_elements(self):
     elements = 'abc def ghi jkl ((mno pqr) stu)'
     expected = ['abc', 'def', 'ghi', 'jkl', [['mno', 'pqr'], 'stu']]
     self.assertEqual(elements_splitter.split_into_tokens(elements), expected)
 def test_simple_elements(self):
     elements = 'abc def ghi'
     self.assertEqual(elements_splitter.split_into_tokens(elements), ['abc', 'def', 'ghi'])
 def test_empty_elements(self):
     elements = ''
     self.assertEqual(elements_splitter.split_into_tokens(elements), [])
 def test_bracketed_or(self):
     elements = 'abc / [def / ghi]'
     expected = ['abc', '/', ['[', 'def', '/', 'ghi', ']']]
     self.assertEqual(elements_splitter.split_into_tokens(elements), expected)
 def test_single_nested_bracketed_element(self):
     elements = '[[[abc]]]'
     expected = [['[', ['[', ['[', 'abc', ']'], ']'], ']']]
     self.assertEqual(elements_splitter.split_into_tokens(elements), expected)
 def test_quoted_elements(self):
     elements = 'abc def "*([ghi jkl])*" mno'
     expected = ['abc', 'def', '"*([ghi jkl])*"', 'mno']
     self.assertEqual(elements_splitter.split_into_tokens(elements), expected)