Переписывая многофункциональный файл журнала Parser для использования формальных грамматиков улучшения ремонтопригодности?

StackOverflow https://stackoverflow.com/questions/2194013

Вопрос

TLDR: Если я построил многофункциональный парсер вручную с другим кодом для каждого формата, будет ли он работать лучше в долгосрочной перспективе, используя один кусок анализатора и ANTLR, Pyparting или аналогичную грамматику, чтобы указать каждый формат?

Контекст: моя работа включает в себя множество файловых файлов журнала от ~ 50 различных ориентиров. Есть несколько в XML, несколько HTML, несколько CSV и много запатентованных материалов без документированного спецификации. Чтобы спасти меня и моих коллеги. Время ввода этих данных вручную, я написал инструмент для анализа, который обрабатывает все форматы, которые мы регулярно справляемся с единым интерфейсом. Дизайн, хотя, не так чистый.

Я написал эту вещь в Python и создал класс парсера. Каждый формат файла обрабатывается как реализация, которая предоставляет свой собственный код для метода прочитанного () парсера. Мне нравится идея иметь только одно определение парсера, которое использует грамматики для понимания каждого формата, но я никогда не делал этого раньше.

Это стоит мое время, и будет легче для других новичков работать в будущем, когда я закончу рефакторинг?

Это было полезно?

Решение

Я не могу ответить на ваш вопрос с 100% уверенностью, но я могу дать вам мнение.

Я нахожу выбор, чтобы использовать надлежащую грамматику против ручного регулирования Regex «Parsers», часто сводится к равновесии.

Если вход очень равномерный, и вы уже знаете язык, который хорошо относится к струнам, как Python или Perl, тогда я бы сохранил свой существующий код.

С другой стороны, я нахожу генераторы парсеров, как Antlr, действительно сияет, когда вход может иметь ошибки и несоответствия в нем. Причина в том, что формальная грамматика позволяет сосредоточиться на том, что следует сосредоточиться в определенном контексте, не беспокойтесь о ходьбе в входном потоке вручную.

Кроме того, если входной поток имеет ошибку, я считаю, что часто проще иметь дело с ними с использованием ANTLR VS Regexs. Причина в том, что если в то, что если пара вариантов доступна ANTLR, встроена в функциональности для удаления правильного пути, включая откат через предикаты.

Сказав все это, есть много, чтобы быть сказано для рабочего кода. Я нахожу, если я хочу что-то переписать, то я пытаюсь сделать хороший случай для того, как переписи выиграет пользователю продукта.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top