Хорошие книги по теории парсеров?

9

Один из моих проектов Java является ответвлением пропаренного , и в отличие от, скажем, Antlr или JavaCC, парсеры генерируются во время выполнения. Генерируемые грамматики - это грамматики синтаксического анализа или PEG (я слышал, что для них используется другой термин - «packrat»).

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

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

FGE
источник

Ответы:

3

Если вы хотите узнать о теории парсеров, я рекомендую первый том этой классической книги:

Ахо, Альфред V .; Ульман, Джеффри Д. Теория синтаксического анализа, перевода и компиляции , Прентис-Холл (1972).

Жбан Амбрус
источник
Это была энциклопедия по теме на момент публикации. Но с тех пор была проведена исследовательская работа.
Бабу
1

Если вы не возражаете против языковых различий, глава 8 Perl высшего порядка посвящена синтаксическому анализу и, в частности, создает анализатор рекурсивного спуска с использованием комбинаторов синтаксического анализа. Он доступен (если вы не боитесь Perl) и доступен для чтения бесплатно, если хотите. Это помогло разжечь мой интерес к методам разбора несколько лет назад.

Hobbs
источник
0

Хотя «Техника синтаксического анализа» - отличная книга, и я прочитал некоторые ее части несколько раз, она сфокусирована на синтаксическом анализе LR, который не будет вам интересен. В вашем конкретном случае вы смотрите на PEG, которые являются своего рода анализом рекурсивного спуска сверху вниз с возвратом в зависимости от порядка альтернатив.

Я хотел бы предложить вам взглянуть на комбинаторы парсеров, которые используют ту же стратегию. Вы можете, например, проверить этот документ http://research.microsoft.com/pubs/65201/parsec-paper-letter.pdf, который использует Haskell для создания комбинаторов синтаксического анализа. Проверьте раздел с тем, try где они включают возврат (раздел 3.4).

В любом случае, что вам нужно выучить:

  • разбор рекурсивного спуска и грамматика LL
  • фиксированный взгляд против бесконечного прогнозирования (осуществляется через возвратный путь)
  • стратегии возврата
  • как бороться с леворекурсивными правилами
  • Запоминание частичных результатов, чтобы избежать показательного поведения
Wickoo
источник