示例#1
0
 def testDadoUmAFAposAplicarFechamentoPositivoNoMesmoOEstadoInicialSohEhFinalSeJaEraFinalAntes(self):
   afd1 = construirAFDComABOndeBsEhImpar()
   afd2 = construirAFDComABOndeAsEhPar()
   self.assertFalse(afd1.obterEstadoInicial().ehFinal())
   self.assertTrue(afd2.obterEstadoInicial().ehFinal())
   
   afd_pos1 = util.obter_fechamento_positivo_af(afd1)
   afd_pos2 = util.obter_fechamento_positivo_af(afd2)
   self.assertFalse(afd_pos1.obterEstadoInicial().ehFinal())
   self.assertTrue(afd_pos2.obterEstadoInicial().ehFinal())
示例#2
0
 def testDadoUmAFPodeAplicarFechamentoPositivoNoMesmo(self):
   afd1 = construirAFDQueGeraOSimboloA()
   afd_pos = util.obter_fechamento_positivo_af(afd1)
   self.assertEqual(len(afd_pos.obterEstados()), len(afd1.obterEstados()))
   self.assertFalse(util.sao_equivalentes_af(afd1, afd_pos))
   
   self.assertTrue(afd1.reconhecePalavra('a'))
   self.assertFalse(afd1.reconhecePalavra('aa'))
   self.assertTrue(afd_pos.reconhecePalavra('aa'))
   self.assertTrue(afd_pos.reconhecePalavra('aaa'))
   self.assertTrue(afd_pos.reconhecePalavra('a'))
   self.assertFalse(afd_pos.reconhecePalavra(EPSILON))
示例#3
0
  def __constroi_automato(self, exp_reg):
    if(self.__ehOperador(exp_reg[0])):
      msg = 'Expressao mal formada, esperando um simbolo mas encontrou um operador[{0}]'
      msg = msg.format(exp_reg[0])
      raise ErroConstruindoAFD(msg)
    
    if(exp_reg[0] == ')'):
      msg = 'Expressao mal formada, esperando um simbolo mas encontrou )'
      raise ErroConstruindoAFD(msg)
          
    if(exp_reg[0] == '('):
      i = self.__obterIndiceDoEncerramentoDoPrimeiroParentesis(exp_reg)
      sub = exp_reg[1:i]      #De depois do ( ateh antes do )
      exp_reg = exp_reg[i+1:] #De depois do ) ate o final da string.
      automato = self.__constroi_automato(sub)
      if(exp_reg == ''):
        return automato
    else:
      if(exp_reg[0] == EPSILON):
        automato = util.gerar_automato_finito_epsilon()
      else:
        automato = util.gerar_automato_finito(exp_reg[0])
      exp_reg = exp_reg[1:]
      if(exp_reg == ''):
        return automato
    
    if(exp_reg[0] == ExpressaoRegular.operadorFechamentoReflexivo):
      automato = util.obter_fechamento_reflexivo_af(automato)
      exp_reg = exp_reg[1:]
      if(exp_reg == ''):
        return automato
      
    if(exp_reg[0] == ExpressaoRegular.operadorFechamentoPositivo):
      automato = util.obter_fechamento_positivo_af(automato)
      exp_reg = exp_reg[1:]
      if(exp_reg == ''):
        return automato
      
    if(exp_reg[0] == ExpressaoRegular.operadorInterrogacao):
      epsilon = util.gerar_automato_finito_epsilon()
      automato = util.unir_af(automato, epsilon)
      exp_reg = exp_reg[1:]
      if(exp_reg == ''):
        return automato
      
    if(exp_reg[0] == ExpressaoRegular.operadorOU):
      return util.unir_af(automato, self.__constroi_automato(exp_reg[1:]))
    
    if(exp_reg[0] == ExpressaoRegular.operadorE):
      return util.concatenar_af(automato, self.__constroi_automato(exp_reg[1:]))

    return util.concatenar_af(automato, self.__constroi_automato(exp_reg))