Descobrir gramática

Supondo que você tenha um grande arquivo txt com um conteúdo que você sabe que respeita uma determinada gramática, alguém conhece algum aplicativo que consiga analisar o documento e descobrir as regras da gramática? Apresentando um relatório final em BNF ou algo assim?

Você quer “descobrir as regras” ou você quer “ver se o arquivo segue as regras”?

A primeira eu nunca ouvi falar (por exemplo, digamos que você tem um texto em russo, mas não sabe a gramática do russo; você iria querer algo que deduzisse a gramática do russo a partir de um monte de texto em russo?)

A segunda é lição de casa daquela disciplina de “Teoria de Construção de Compiladores”. Use algo como o javacc para gerar um parser.

Bem, seria mais para o primeiro caso.

Mas claro que eu não espero descobrir toda a gramática corretamente assim. Seria mais como uma ferramenta auxiliar que pegasse o texto e analizasse ele como um ‘exemplo’.

Eu já vi ferramentas como o XMLBuddy (plugin para o Eclipse) que consegue a partir de um documento XML deduzir e sugerir as regras do DTD.

Nem sempre ele acerta, mas aí basta editar ou complementar estes pontos do DTD gerado.

Então a idéia seria uma ferramenta que pegasse o texto e dissesse para o usuário algo como:

  • Encontrei tais tokens
  • Eles aparecem nas seguintes combinações
  • Com X frequência dentro do arquivo

E a partir disso, poderia sugerir as regras que, aí sim, você organizaria em uma BNF certinha e geraria um compilador ou interpretador com Lex, Yacc, ou qualquer outra ferramenta.

Bom, XML é XML, e russo é russo.
Você pode sugerir isso para seu orientador de doutorado, já que isso combina duas coisas - inteligência artificial e teoria de compiladores :stuck_out_tongue:

Sim, concordo. Se aproxima muito de inteligência artificial. Mas só para esclarecer mais, a idéia não seria para processar linguagem natural não.

Seria voltado para linguagens formais mesmo.

Imagine a seguinte situação:

Você tem uma aplicação X que gera uma montanha de informações em um arquivo de texto numa gramática que só ela conhece. Aí, o fabricante da aplicação X não conta para você quais são as regras da gramática e você vai ter que analisar isso sozinho para escrever o seu parser. Então, seria legal se você tivesse como apoio uma ferramenta que desse uma força mostrando para você quais tokens e em quais diferentes combinações eles aparecem em (por exemplo) cada linha do arquivo. Aí a partir disso, você poderia deduzir a gramática e montar o seu parser.

Eu queria encontrar algo assim para resolver uns problemas de uns projetos meus. E se não encontrar vou acabar desenvolvendo alguma coisa simples para pelo menos fazer um ‘distinct’ no arquivo e me dizer quais tokes tem lá. Fico imaginando se poderia interessar a mais alguém …