Мне приходится иметь дело с множеством разных форматов файлов. Не менее 50, а может и более 100.
Я играл с Antlr в прошлом. Однако я не уверен, что Antlr подойдет для этого проекта по нескольким причинам:
- Трудно комбинировать и повторно использовать грамматики и / или кусочки грамматик
- Antlr выполняет генерацию кода - для внесения изменений в существующий синтаксический анализатор необходимо вернуться в Antlr, внести изменения, восстановить код, интегрировать код обратно в кодовую базу и запустить модульные тесты
- для построения дерева / обработки требуется работа с другим языком внутри Antlr - потенциальная проблема для будущих разработчиков
В принципе, мне нравится Antlr, но я думаю, что он может лучше подходить для создания одного или двух парсеров для сложных языков, а не для 100 парсеров для несколько более простых языков / форматов.
Альтернативой Antlr-подобным генераторам синтаксических анализаторов является комбинаторы синтаксических анализаторов . Преимущества в том, что анализаторы напрямую интегрированы в код, что упрощает повторное использование, тестирование и дальнейшую абстракцию. Кроме того, будущим разработчикам не придется учиться использовать новый инструмент. Недостатком комбинаторов синтаксического анализа является то, что я не знаю каких-либо тяжелых библиотек для использования их в Java.
Итак, вопросы:
- Подходит ли Antlr / предназначен для такого масштабного проекта разбора?
- Какие есть другие варианты крупномасштабного анализа в Java?
Примечание: некоторые форматы файлов - это CSV или табуляция, некоторые более сложные, некоторые такие же сложные, как Java. С точки зрения семантики, они также могут быть довольно сложными (хотя и не все).