def clicouTransformarEmAFD(self): try: exp = ExpressaoRegular(str(self.__ui.exp_reg.text())) afd = exp.obterAFD() afd = util.remover_estados_mortos_afd(afd) self.__janela_principal.obterAFGUI().setarAF(afd) except Exception as excecao: self._error.showMessage(str(excecao))
def testRobustezDaTransformacaoDaEREmAFD(self): automato = construirAFDComABOndeAsEhPar() exp_reg = ExpressaoRegular("(b*ab*a)*b*") afd_exp = exp_reg.obterAFD() self.assertTrue(util.sao_equivalentes_af(automato, afd_exp)) automato = construirAFDComABOndeBsEhImpar() exp_reg = ExpressaoRegular("a*ba* (a*ba*ba*)*") afd_exp = exp_reg.obterAFD() self.assertTrue(util.sao_equivalentes_af(automato, afd_exp))
def clicouTestarEquivalencia(self): try: exp1 = ExpressaoRegular(str(self.__ui.exp_reg1.text())) exp2 = ExpressaoRegular(str(self.__ui.exp_reg2.text())) if util.sao_equivalentes_af(exp1.obterAFD(), exp2.obterAFD()): self.__ui.sao_equivalentes.setText("OK") else: self.__ui.sao_equivalentes.setText("NOK") except Exception as excecao: self._error.showMessage(str(excecao))
def testSabeQualEhOSeuAFDMinimoCorrespondente(self): estados = set() estados.add(Estado("q0", set([Transicao("a", "q1")]), True, False)) estados.add(Estado("q1", set([Transicao("b", "q1"), Transicao("c", "q2")]), False, False)) estados.add(Estado("q2", set(), False, True)) alfabeto = set(["a", "b", "c"]) automato_a_bEstrela_c = AutomatoFinito(alfabeto, estados) exp_reg = ExpressaoRegular("ab*c") afd_exp = exp_reg.obterAFD() self.assertTrue(util.sao_equivalentes_af(automato_a_bEstrela_c, afd_exp)) self.assertTrue(afd_exp.ehDeterministico()) self.assertTrue(afd_exp.ehMinimo())
def testModificacoesQueAlteramLinguagem(self): exp1 = ExpressaoRegular("a?a?a?") exp2 = ExpressaoRegular("a?") self.assertFalse(util.sao_equivalentes_af(exp1.obterAFD(), exp2.obterAFD())) exp1 = ExpressaoRegular("a.b") exp2 = ExpressaoRegular("b.a") self.assertFalse(util.sao_equivalentes_af(exp1.obterAFD(), exp2.obterAFD()))
def testModificacoesQueNaoAlteramLinguagem(self): exp1 = ExpressaoRegular("a*a*a*") exp2 = ExpressaoRegular("a*") self.assertTrue(util.sao_equivalentes_af(exp1.obterAFD(), exp2.obterAFD())) exp1 = ExpressaoRegular("a|b") exp2 = ExpressaoRegular("b|a") self.assertTrue(util.sao_equivalentes_af(exp1.obterAFD(), exp2.obterAFD()))
def testDefineEscopoDosParentesisCorretamente(self): exp1 = ExpressaoRegular("(a) | (b)") exp2 = ExpressaoRegular("a|b") self.assertTrue(util.sao_equivalentes_af(exp1.obterAFD(), exp2.obterAFD()))
def testNaoImportaAQuantidadeDeParentesis(self): exp1 = ExpressaoRegular("((( a* b((ab))* b )))") exp2 = ExpressaoRegular(" a* b(ab)* b ") self.assertTrue(util.sao_equivalentes_af(exp1.obterAFD(), exp2.obterAFD()))
def testReconheceOOperadorFechamentoPosito(self): exp1 = ExpressaoRegular("a+") exp2 = ExpressaoRegular("aa*") self.assertTrue(util.sao_equivalentes_af(exp1.obterAFD(), exp2.obterAFD()))
def testReconheceOOperadorInterrogacao(self): exp1 = ExpressaoRegular("a?") exp2 = ExpressaoRegular("a|" + EPSILON) self.assertTrue(util.sao_equivalentes_af(exp1.obterAFD(), exp2.obterAFD()))
def testReconheceOEpsilonComoCaracterEspecialEGeraUmAutomatoMinimoQueGeraEpsilon(self): exp = ExpressaoRegular(EPSILON) self.assertTrue(util.sao_equivalentes_af(exp.obterAFD(), construirAFDQueGeraEpsilon()))
def testExpressaoRegPodeEstarTodaEmglobadaEmParenteses(self): exp1 = ExpressaoRegular("( a* b(ab)* b )") exp2 = ExpressaoRegular(" a* b(ab)* b ") self.assertTrue(util.sao_equivalentes_af(exp1.obterAFD(), exp2.obterAFD()))
def testPodeSalvarECarregarUmaExpressaoRegularDoDisco(self): exp = ExpressaoRegular('a*b?.(ab)') util.salvar(exp, os.path.join(os.getcwd(), 'teste.exp')) exp2 = util.carregar(os.path.join(os.getcwd(), 'teste.exp')) self.assertTrue(util.sao_equivalentes_af(exp.obterAFD(), exp2.obterAFD()))