Example #1
0
    def test_right_recursive(self):
        expected = first(self.right_recursive, ['T'])
        self.assertTrue(len(expected) == 2)
        self.assertTrue('id' in expected)
        self.assertTrue('(' in expected)

        expected = first(self.right_recursive, ['E'])
        self.assertTrue(len(expected) == 2)
        self.assertTrue('id' in expected)
        self.assertTrue('(' in expected)
Example #2
0
 def test_right_recursive(self):
    expected = first(self.right_recursive, ['T'])
    self.assertTrue(len(expected) == 2)
    self.assertTrue('id' in expected)
    self.assertTrue('(' in expected)
    
    expected = first(self.right_recursive, ['E'])
    self.assertTrue(len(expected) == 2)
    self.assertTrue('id' in expected)
    self.assertTrue('(' in expected)
Example #3
0
    def test_right_recursive_epsilon(self):
        expected = first(self.right_recursive_epsilon, ['T'])
        self.assertTrue(len(expected) == 3)
        self.assertTrue('id' in expected)
        self.assertTrue('(' in expected)
        self.assertTrue(self.right_recursive_epsilon.EMPTY in expected)

        expected = first(self.right_recursive_epsilon, ['E'])
        self.assertTrue(len(expected) == 5)
        self.assertTrue('id' in expected)
        self.assertTrue('(' in expected)
        self.assertTrue('+' in expected)
        self.assertTrue('-' in expected)
        self.assertTrue(self.right_recursive_epsilon.EMPTY in expected)
Example #4
0
 def test_right_recursive_epsilon(self):
    expected = first(self.right_recursive_epsilon, ['T'])
    self.assertTrue(len(expected) == 3)
    self.assertTrue('id' in expected)
    self.assertTrue('(' in expected)
    self.assertTrue(self.right_recursive_epsilon.EMPTY in expected)
    
    expected = first(self.right_recursive_epsilon, ['E'])
    self.assertTrue(len(expected) == 5)
    self.assertTrue('id' in expected)
    self.assertTrue('(' in expected)
    self.assertTrue('+' in expected)
    self.assertTrue('-' in expected)
    self.assertTrue(self.right_recursive_epsilon.EMPTY in expected)
Example #5
0
 def test_functions_twolevels_grammar(self):
    expected = first(self.twolevels, ['A'])
    self.assertTrue(len(expected) == 1)
    self.assertTrue('c' in expected)
    
    expected = first(self.twolevels, ['B'])
    self.assertTrue(len(expected) == 1)
    self.assertTrue(self.twolevels.EMPTY in expected)
    
    expected = follow(self.twolevels, 'B')
    self.assertTrue(len(expected) == 1)
    self.assertTrue('c' in expected)
    
    expected = follow(self.twolevels, 'M')
    self.assertTrue(expected == follow(self.twolevels, 'B'))
Example #6
0
    def test_simple(self):
        expected = first(self.simple, ['A'])
        self.assertTrue(len(expected) == 2)
        self.assertTrue('a' in expected)
        self.assertTrue(self.simple.EMPTY in expected)

        expected = first(self.simple, ['B'])
        self.assertTrue(len(expected) == 2)
        self.assertTrue('b' in expected)
        self.assertTrue(self.simple.EMPTY in expected)

        expected = first(self.simple, ['S'])
        self.assertTrue(len(expected) == 3)
        self.assertTrue('s' in expected)
        self.assertTrue('b' in expected)
        self.assertTrue('a' in expected)
Example #7
0
   def test_simple(self):
      expected = first(self.simple, ['A'])
      self.assertTrue(len(expected) == 2)
      self.assertTrue('a' in expected)
      self.assertTrue(self.simple.EMPTY in expected)

      expected = first(self.simple, ['B'])
      self.assertTrue(len(expected) == 2)
      self.assertTrue('b' in expected)
      self.assertTrue(self.simple.EMPTY in expected)
      
      expected = first(self.simple, ['S'])
      self.assertTrue(len(expected) == 3)
      self.assertTrue('s' in expected)
      self.assertTrue('b' in expected)
      self.assertTrue('a' in expected)
Example #8
0
    def test_lr_value_with_actions(self):
        expected = first(self.lrvalue_with_actions, ['S'])
        self.assertTrue(len(expected) == 3)
        self.assertTrue('(' in expected)
        self.assertTrue('*' in expected)
        self.assertTrue('id' in expected)

        expected = first(self.lrvalue_with_actions, ['L'])
        self.assertTrue(len(expected) == 2)
        self.assertTrue('*' in expected)
        self.assertTrue('id' in expected)

        expected = first(self.lrvalue_with_actions, ['R'])
        self.assertTrue(len(expected) == 3)
        self.assertTrue('(' in expected)
        self.assertTrue('*' in expected)
        self.assertTrue('id' in expected)
Example #9
0
 def test_lr_value_with_actions(self):
    expected = first(self.lrvalue_with_actions, ['S'])
    self.assertTrue(len(expected) == 3)
    self.assertTrue('(' in expected)
    self.assertTrue('*' in expected)
    self.assertTrue('id' in expected)
    
    expected = first(self.lrvalue_with_actions, ['L'])
    self.assertTrue(len(expected) == 2)
    self.assertTrue('*' in expected)
    self.assertTrue('id' in expected)
    
    expected = first(self.lrvalue_with_actions, ['R'])
    self.assertTrue(len(expected) == 3)
    self.assertTrue('(' in expected)
    self.assertTrue('*' in expected)
    self.assertTrue('id' in expected)
Example #10
0
 def test_functions_simple_grammar(self):
    expected = first(self.simple, ['A'])
    self.assertTrue(len(expected) == 1)
    self.assertTrue('a' in expected)
    
    expected = follow(self.simple, 'M')
    self.assertTrue(len(expected) == 1)
    self.assertTrue('a' in expected)
Example #11
0
    def test_more_complex(self):
        expected = first(self.more_complex, ['A'])
        self.assertTrue(len(expected) == 3)
        self.assertTrue('a' in expected)
        self.assertTrue('c' in expected)
        self.assertTrue(self.more_complex.EMPTY in expected)

        expected = first(self.more_complex, ['B'])
        self.assertTrue(len(expected) == 2)
        self.assertTrue('d' in expected)
        self.assertTrue('b' in expected)

        expected = first(self.more_complex, ['S'])
        self.assertTrue(len(expected) == 5)
        self.assertTrue('d' in expected)
        self.assertTrue('b' in expected)
        self.assertTrue('a' in expected)
        self.assertTrue('c' in expected)
        self.assertTrue('q' in expected)
Example #12
0
 def test_more_complex(self):
    expected = first(self.more_complex, ['A'])
    self.assertTrue(len(expected) == 3)
    self.assertTrue('a' in expected)
    self.assertTrue('c' in expected)
    self.assertTrue(self.more_complex.EMPTY in expected)
    
    expected = first(self.more_complex, ['B'])
    self.assertTrue(len(expected) == 2)
    self.assertTrue('d' in expected)
    self.assertTrue('b' in expected)
    
    expected = first(self.more_complex, ['S'])
    self.assertTrue(len(expected) == 5)
    self.assertTrue('d' in expected)
    self.assertTrue('b' in expected)
    self.assertTrue('a' in expected)
    self.assertTrue('c' in expected)
    self.assertTrue('q' in expected)
Example #13
0
   def next_items(self, grammar):
      '''Given the item A -> abc*Bd [x], where x is the lookahead terminal, 
         return each alternative of B -> *efg [y], for each 'y' in first(dx).
         Return a empty list if B is not a production or not exist B.'''
      alternative = grammar[self.sym_production][self.alternative]
      if self.at_the_end(alternative, grammar): # No exist 'next'
         return []

      next_sym_production = alternative[self.position]
      if grammar.is_a_nonterminal(next_sym_production):
         result = []
         first_set = first(grammar, alternative[self.position + 1:] + \
                                                            (self.lookahead,)) 
         for terminal in first_set:
            result.extend([LR1(next_sym_production, i, 0, terminal) 
                           for i in range(len(grammar[next_sym_production]))])
         
         return result
      else:
         return []