def gerar(self, quantidade_requisitada): arvore_derivacoes = ArvoreDerivacoes(self.gramatica).montar_sem_recursao() if not arvore_derivacoes.pode_gerar_sentenca_finita(): return None quantidade_gerada_anterior = 0 while True: nos_finais = arvore_derivacoes.buscar_nos_de_sentencas_finais() quantidade_gerada = len(nos_finais) if len(arvore_derivacoes.folhas) == quantidade_gerada or quantidade_gerada >= quantidade_requisitada: nos_finais.sort(key = lambda x: x.quantidade_derivacoes()) if quantidade_gerada > quantidade_requisitada: nos_finais = nos_finais[:quantidade_requisitada] return nos_finais arvore_derivacoes.gerar_novo_nivel(False)
class IdentificadorLinguagemGramatica: def __init__(self, gramatica): self.gramatica = gramatica self.arvore_derivacoes = ArvoreDerivacoes(gramatica).montar_sem_recursao() def identificar(self): if not self.arvore_derivacoes.pode_gerar_sentenca_finita(): return None sentencas = [no.sentenca for no in self.arvore_derivacoes.folhas] if any(sentenca_contem_nt(s) for s in sentencas): return self.inferir_linguagem() else: sentencas = [SIMBOLO_SENTENCA_VAZIA if s == '' else s for s in sentencas] return '{%s}' % (', '.join(sentencas)) def inferir_linguagem(self): gerador_sentencas = GeradorSentencas(self.gramatica) sentencas_geradas = [no.sentenca for no in gerador_sentencas.gerar(100)] return IdentificadorLinguagemPorInferencia(sentencas_geradas).identificar()
def gerar(self, quantidade_requisitada): arvore_derivacoes = ArvoreDerivacoes( self.gramatica).montar_sem_recursao() if not arvore_derivacoes.pode_gerar_sentenca_finita(): return None quantidade_gerada_anterior = 0 while True: nos_finais = arvore_derivacoes.buscar_nos_de_sentencas_finais() quantidade_gerada = len(nos_finais) if len( arvore_derivacoes.folhas ) == quantidade_gerada or quantidade_gerada >= quantidade_requisitada: nos_finais.sort(key=lambda x: x.quantidade_derivacoes()) if quantidade_gerada > quantidade_requisitada: nos_finais = nos_finais[:quantidade_requisitada] return nos_finais arvore_derivacoes.gerar_novo_nivel(False)
def __init__(self, gramatica): self.gramatica = gramatica self.arvore_derivacoes = ArvoreDerivacoes(gramatica).montar_sem_recursao()