На чем парсить большие объемы output из научных программ
еорию компиляции когда-то в Универе по Ахо-Ульману учил и что-то до сих пор помню.
------
Делая строго по теории компилятор написать, разумеется, можно.
Правда с непривычки это займет довольно много времени.
В зависимости от того, насколько будешь придерживаться теории - модификация может стать мучительно сложной и долгой.
А времени, как ты сам говоришь, у тебя нет.
Потому могу посоветовать делать парсинг документов на базе "распознавателей".
Т.е. ты берешь документ и режешь на куски - какие-то маркеры между частями там же должны быть - вот по ним и режь.
С текстовым документом - просто - построчно и/или по абзацам.
Нарезанные куски скармливаемые "распознавателям".
Задача распознавателя - вычислить может ли он извлечь интересующие данные из предоставленного фрагмента.
Если "распознаватель" может извлечь нужное из фрагмента - он его извлекает, если нет - т.е. кусок им не опознается как содержащий узнаваемые им данные - кусок передается следующему "распознавателю".
Что нужно помнить - ты не будешь иметь полный компилятор исходного документа или группы документов и, соответственно, могут быть множественные распознавания... ну или в терминах грамматики - локальные неоднозначности. Т.е. придется решать как это найти и как разрешить.
Но сами распознаватели писать просто.
Например - распознаватель рецепта борща.
Документ должен содержать текст "Рецепт борща.". Иначе он не считается распознанным.
Дальше пойдут ингредиенты - каждый распознается своим отдельным распознавателем.
Но ведь ты же знаешь что именно тебе надо извлечь из всех наборов данных? Вот оттуда и танцуй.
Писанины довольно много, но она не сложная. Ну валидировать весь набор надо...
Работать будет относительно медленно.
У меня документы разбираются где-то в 20 раз медленнее, чем при чтении по формату, но данные Я получаю корректные.
Модификация всей системы - относительно не сложная - меняется/дописывается только набор распознавателей - проверено на множественных изменениях форматов документов клиентами.
На чем писать - почти без разницы.
Будет чуток удобнее иметь базовый абстрактный класс и виртуальные функции, но ничто не мешает вместо массива объектов(распознователей) сделать массив указателей на функции.