code: def check(self):
          
          has_term = False
  
          if self.START_STATE not in self.states:
              raise SyntaxError('Undefined start rule')
  
          for state in self.states:
              for rule in self.states[state]:
                  if rule is not None:
                      if rule[2] == self.TERM_STATE:
                          has_term = True
                      elif rule[2] not in self.states:
                          raise SyntaxError('Unexpected state: ' + rule[2])
  
          if not has_term:
              raise SyntaxError('Missed terminate state')
docs: Check semantic rules.