Я убираю старый проект, который вычисляет ряд простых показателей о крупных проектах программного обеспечения. Одним из показателей является длина файлов/классов/методов. В настоящее время мой код «догадывается», где границы класса/метода основаны на очень грубом алгоритме (перемещайте файл, поддерживая «текущую глубину» и корректируя его, когда вы сталкиваетесь с некотируемыми скобками, когда вы возвращаетесь на уровень, класс или метод , считайте, что он вышел). Тем не менее, есть много проблем с этой процедурой, и «простой» способ обнаружения, когда ваша глубина изменилась, не всегда эффективна.Источник парсеров для языков программирования?
Чтобы сделать точные результаты, мне нужно использовать канонический способ (на каждом языке) определения определений функций, определения классов и изменений глубины. Это сводится к написанию простого анализатора для генерации деревьев синтаксического анализа, содержащих по крайней мере эти элементы для каждого языка, к которому я хочу применить свой проект.
Очевидно, парсеры были написаны для всех этих языков раньше, поэтому мне кажется, что мне не нужно дублировать это усилие (хотя писать парсеры - это весело). Есть ли какой-то проект с открытым исходным кодом, который собирает готовые к использованию библиотеки парсеров для кучи исходных языков? Или я должен просто использовать ANTLR, чтобы сделать свой собственный с нуля? (Примечание: я был бы рад передать проект на другой язык, чтобы использовать большой существующий ресурс, поэтому, если вы знаете его, неважно, на каком языке он написан.)
Существуют библиотеки подсветки синтаксиса (приходят на ум пигменты), которые обрабатывают множество разных языков. Интересно, будет ли один из них предоставить достаточную информацию для вашего дела. Я подозреваю, что нет, но, возможно, стоит посмотреть. – Ken