Хороші книги з теорії парсера?


9

Один з моїх проектів Java є відгалуженням пропареного , і в відміну від, скажімо, Antlr або JavaCC, парсери генеруються під час виконання. Граматики, що утворюються, - граматики виразного розбору, або PEG (я чую, що ще один термін для них - "packrat").

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

Чи є хороший довідник про парсери, який я можу придбати та прочитати, або навіть посилання в Інтернеті, які можуть допомогти мені побудувати таке "відображення", що враховує мої слабкі теоретичні знання?

Відповіді:



3

Якщо ви хочете дізнатися про теорію парсерів, рекомендую 1 том цієї класичної книги:

Ахо, Альфред В.; Уллман, Джеффрі Д., Теорія розбору, перекладу та компіляції , Prentice-Hall (1972).


Це була енциклопедія на цю тему на момент публікації. Але з тих пір проводилася науково-дослідна робота.
babou

1

Якщо ви не заперечуєте в мовній різниці, у розділі 8 вищого порядку Perl йдеться про розбір, зокрема, формує рекурсивний аналізатор спуску за допомогою комбінаторів парсера. Він доступний (якщо ви не боїтеся Perl) і доступний для читання безкоштовно, якщо хочете. Це допомогло викликати мій інтерес до методів розбору кілька років тому.


0

Хоча методики розбору - це чудова книга, і я читав деякі частини кілька разів, вона зосереджується на синтаксичному розборі, що не буде цікавим для вас. У вашому конкретному випадку ви дивитесь на PEG, які є своєрідним рекурсивним розбором спуску зверху вниз із зворотним відстеженням на основі порядку альтернатив.

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

У будь-якому випадку, що вам потрібно навчитися:

  • рекурсивно-десантний розбір та граматики LL
  • фіксований lookahead порівняно з нескінченним lookahead (робиться за допомогою зворотного відстеження)
  • зворотні стратегії
  • як поводитися з ліво-рекурсивними правилами
  • Запам'ятовування часткових результатів, щоб уникнути експоненціальної поведінки
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.