示例#1
0
    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)
示例#2
0
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()
示例#3
0
    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)
示例#4
0
 def __init__(self, gramatica):
     self.gramatica = gramatica
     self.arvore_derivacoes = ArvoreDerivacoes(gramatica).montar_sem_recursao()