Источник парсеров для языков программирования?

Я вычищаю свой старый проект, который вычисляет ряд простых метрик для крупных программных проектов. Одним из показателей является длина файлов / классов / методов. В настоящее время мой код «угадывает», где границы класса / метода основаны на очень грубом алгоритме (просмотрите файл, сохраняя «текущую глубину» и корректируя его всякий раз, когда вы встречаете скобки без кавычек; когда вы возвращаетесь к уровню, на котором начался класс или метод) Считайте, что это вышло). Однако существует много проблем с этой процедурой, и «простой» способ определить, когда ваша глубина изменилась, не всегда эффективен.

Чтобы это дало точные результаты, мне нужно использовать канонический способ (на каждом языке) обнаружения определений функций, определений классов и изменений глубины. Это равносильно написанию простого синтаксического анализатора для генерации деревьев разбора, содержащих по крайней мере эти элементы для каждого языка, к которому мой проект применим.

Очевидно, парсеры были написаны для всех этих языков раньше, так что, похоже, мне не нужно было дублировать эти усилия (хотя написание парсеров - это весело).Есть ли какой-нибудь проект с открытым исходным кодом, который собирает готовые библиотеки синтаксического анализатора для нескольких исходных языков? Или я должен просто использовать ANTLR, чтобы сделать свой собственный с нуля? (Примечание: я был бы рад перенести проект на другой язык, чтобы использовать отличный существующий ресурс, поэтому, если вы знаете один, не имеет значения, на каком языке он написан.)

Ответы на вопрос(2)

Ваш ответ на вопрос