Sto rispolvendo un mio vecchio progetto che calcola un numero di semplici metriche su grandi progetti software. Una delle metriche è la lunghezza di file/classi/metodi. Attualmente il mio codice "indovina" dove i limiti di classe/metodo sono basati su un algoritmo molto grezzo (attraversa il file, mantenendo una "profondità attuale" e regolandolo ogni volta che incontri parentesi non quotate; quando ritorni al livello inizia una classe o metodo , consideralo uscito). Tuttavia, ci sono molti problemi con questa procedura e un modo "semplice" di rilevare quando la tua profondità è cambiata non è sempre efficace.Fonte di parser per i linguaggi di programmazione?
Per ottenere risultati precisi, è necessario utilizzare la modalità canonica (in ciascuna lingua) per rilevare definizioni di funzioni, definizioni di classi e modifiche di profondità. Ciò equivale a scrivere un semplice parser per generare alberi di analisi contenenti almeno questi elementi per ogni lingua a cui voglio che il mio progetto sia applicabile.
Ovviamente i parser sono stati scritti per tutte queste lingue prima, quindi sembra che non dovrei duplicare questo sforzo (anche se scrivere parser è divertente). Esiste un progetto open source che raccoglie le librerie di parser pronte per l'uso per un sacco di lingue di partenza? O dovrei semplicemente usare ANTLR per creare il mio da zero? (Nota: sarei lieto di portare il progetto in un'altra lingua per utilizzare una grande risorsa esistente, quindi se ne conoscete uno, non importa in che lingua è scritto.)
Esistono librerie di evidenziazione della sintassi (mi vengono in mente i frammenti) che gestiscono molte lingue diverse. Mi chiedo se uno di loro fornirebbe abbastanza informazioni per il tuo caso. Sospetto di no, ma potrebbe valere la pena dare un'occhiata. – Ken