Когда писать синтаксический анализатор с использованием грамматики по сравнению с использованием регулярных выражений с языком - PullRequest
3 голосов
/ 23 сентября 2010

В моей мастерской я видел, как писать парсеры, компиляторы с использованием ANTLR.Но в реальном мире часто возникает необходимость в синтаксическом анализе и извлечении релевантного контента из большой нагрузки поступающих потоковых данных.Каждый язык имеет свой собственный механизм регулярных выражений, который удобно использовать для анализа данных.В качестве альтернативы мы можем написать грамматику EBNF и воспользоваться удобным инструментом, таким как ANTLR, для автоматической генерации синтаксического анализатора.Последний подход менее подвержен ошибкам и гарантированно будет более надежным, чем первый (особенно в случае некоторых лишних пробелов, новых строк).

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

1 Ответ

3 голосов
/ 24 сентября 2010

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

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

...