Newsgroup: it.comp.os.linux.development
Titolo: Indicizzazione sorgenti

Hi all
ho in mente di sviluppare una classe in python in grado di indicizzare un
albero di sorgenti. In pratica fare quello che fa ctags, cioe' trovare le
dichiarazioni di funzioni, metodi, classi ecc...
Tutto questo sarebbe poi facilmente pluggabile in un qualsiasi editor per
implementare tutta una serie di simpatiche funzionalita'.
Non voglio riscrivere tutti i parser, questo e' chiaro. Ho pensato di usare
il file generato da ctags, parsarlo e piazzare tutto in memoria. Purtroppo
le prestazioni non mi soddisfano. Per parsare un file da ~920K (cdrdao
1.1.5), fare tutti i regex match e piazzare in memoria (dict e liste) ci
vogliono quasi 30 sec su un duron 600. Che usi readlines, xreadlines o mmap
la storia non cambia. Vorrei dei consigli su come abbattere questo tempo.
Potrei prevedere dei file indicizzati (gdbm magari?) magari modificando
direttamente ctags. Come funziona il multithreading del python?
-- 
  Giuseppe "Cowo" Corbelli \/\ My software: 
http://cowo.yoda2000.net
    **ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail** 
       -<! Riding from wastelands Black were their skies
              My armour's still bleeding Ripped by fire and ice !>-
                    Lost Horizon - The Kingdom Of My Will

 writes:
Giuseppe> Hi all ho in mente di sviluppare una classe in python in
Giuseppe> grado di indicizzare un albero di sorgenti. In pratica fare
Giuseppe> quello che fa ctags, cioe' trovare le dichiarazioni di
Giuseppe> funzioni, metodi, classi ecc...  Tutto questo sarebbe poi
Giuseppe> facilmente pluggabile in un qualsiasi editor per
Giuseppe> implementare tutta una serie di simpatiche funzionalita'.
Giuseppe> Non voglio riscrivere tutti i parser, questo e' chiaro. Ho
Giuseppe> pensato di usare il file generato da ctags, parsarlo e
Giuseppe> piazzare tutto in memoria. Purtroppo le prestazioni non mi
Giuseppe> soddisfano. Per parsare un file da ~920K (cdrdao 1.1.5),
Giuseppe> fare tutti i regex match e piazzare in memoria (dict e
Giuseppe> liste) ci vogliono quasi 30 sec su un duron 600. Che usi
Giuseppe> readlines, xreadlines o mmap la storia non cambia. Vorrei
Puoi usare diversi sistemi. Ti consiglio un parser con mx.TextTools:
sicuramente il piů flessibile e SimpleParser, col quale puoi usare
sintassi EBNF. Ti consiglio anche gli articoli:
http://www-106.ibm.com/developerworks/linux/library/l-simple.html
http://www-106.ibm.com/developerworks/library/l-pyind.html
Se vuoi un collaboratore, ne hai appena trovato uno.
Giuseppe> dei consigli su come abbattere questo tempo.  Potrei
Giuseppe> prevedere dei file indicizzati (gdbm magari?) magari
Giuseppe> modificando direttamente ctags. Come funziona il
Giuseppe> multithreading del python?
Bene grazie :-P
Saluti
Marco

 sintassi EBNF. Ti consiglio anche gli articoli:
...
Ok, ci daro' un'occhiata. Intanto la situazione si e' evoluta:
sono in contatto con l'autore del parser global 
http://www.gnu.org/software/global/
Global ha dei parser suoi propri e puo' usare ctags. Salva tutta la sua roba
in un db gdbm (btree).
Quello che si pensa di fare e' ampliare lo spettro delle possibilita' di
global, salvando anche il tipo dei tag e la loro ancestry. Per far questo si
pensa di importare parser da ctags o da source navigator. Poi quando tutto
sara' pronto sara' possibile usare direttamente i gdb creati da global
oppure usarlo direttamente con le pipe.
Se sei sempre interessato...
-- 
  Giuseppe "Cowo" Corbelli \/\ My software: 
http://cowo.yoda2000.net
    **ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail**
  -<! Asynchronous inputs are at the root of our race problems. !>-
                 D. Winker and F. Prosser