Одним из основных отличий между перечисленными вами инструментами является то, что ANTLR, Bison и их друзья являются синтаксическими анализаторами , тогда как Parsec является синтаксическим анализатором комбинатор библиотеки.
Генератор парсера читает описание грамматики и выплевывает парсер.Как правило, невозможно объединить существующих грамматик в новую грамматику, и, конечно, невозможно объединить два существующих сгенерированных синтаксических анализатора в новый синтаксический анализатор.
комбинатор синтаксического анализатора OTOH ничего не делает но объединяет существующие парсеры в новые парсеры.Обычно библиотека комбинатора синтаксического анализатора поставляется с парой тривиальных встроенных синтаксических анализаторов, которые могут анализировать пустую строку или один символ, и поставляется с набором комбинаторов, которые принимают 1 или более синтаксических анализаторов и возвращают новый, который, например,анализирует последовательность исходных синтаксических анализаторов (например, вы можете комбинировать синтаксический анализатор d
и синтаксический анализатор o
для формирования синтаксического анализатора do
), чередование исходных синтаксических анализаторов (например, анализатор 0
и 1
парсер для 0|1
парсера) или парсинг исходного анализа несколько раз (повторение).
Это означает, что вы можете, например, взять существующий парсер для Java и существующий парсер для HTML иобъедините их в парсер для JSP.
Большинство генераторов парсеров не поддерживают это или поддерживают только ограниченным образом.Parser комбинаторы OTOH только поддерживают это и ничего больше.