Extração recursiva da estrutura de árvore dos documentos de arquivo de texto incluídos da linha de comando?

0

Muitas vezes me vejo precisando disso:

Digamos que você tenha um arquivo test.c ; inclui outros arquivos, digamos:

#include <stdio.h>
#include "mylib.h"
#include "../mylib_extra.h"
#include "../mylib_bonus.h"
...

... então, digamos, "mylib.h" no mesmo diretório, também carrega outra coisa:

#include <special.h>
#include "/path/to/calculator.h"
#include "testing/tester.h"
...

... etc. Agora, algumas dessas declarações referem-se aos diretórios do sistema, que devem ser conhecidos de antemão - mas, em princípio, eu acho que seria possível escrever uma ferramenta, que deu um padrão da instrução "include" , poderia recursivamente abrir todos os arquivos referidos no arquivo inicial, procurar as mesmas instruções lá, abrir arquivos ainda mais - até desenhar um mapa de árvore. Itens que não puderam abrir sem o conhecimento do caminho, seriam marcados.

Eu imaginaria uma ferramenta como essa funcionando assim (onde os arquivos encontrados / abertos são marcados com um (*) e nenhuma marcação é diferente)

$ ./getincludetree test.c

test.c
- <stdio.h> 
- "mylib.h" (*)
-- <special.h> 
-- "/path/to/calculator.h" (*)
--- ...
-- "testing/tester.h" (*)
--- ...
- "../mylib_extra.h" (*)
-- ...
- "../mylib_bonus.h" (*)
-- ...

Melhor ainda, se você pudesse especificar um padrão para a instrução include, em vez de #include "..." , seria possível usar, digamos, \input{...} e também a mesma ferramenta para encontrar a estrutura de inclusão de um documento Latex.

Existe algo assim lá fora?

Muito obrigado antecipadamente por qualquer resposta,
Felicidades!

    
por sdaau 24.05.2012 / 12:54

2 respostas

1

Você deseja implementar uma classe autoloader, um verificador de arquivos com cache: link .

    
por 24.05.2012 / 13:49
1

Hmmm. Parece que você quer:

Cscope
Ctags
Gnu global

Google esses nomes, acho que deveria ajudá-lo. Eles são indexadores de origem.

    
por 24.05.2012 / 20:12