Один из моих проектов Java является ответвлением пропаренного , и в отличие от, скажем, Antlr или JavaCC, парсеры генерируются во время выполнения. Генерируемые грамматики - это грамматики синтаксического анализа или PEG (я слышал, что для них используется другой термин - «packrat»).
Хотя генерация во время выполнения добавляет сложности (включая генерацию байт-кода), другой аспект связан с самой теорией синтаксического анализатора. Поскольку у меня, к сожалению, нет твердого фона в информатике, мне не хватает теоретических знаний, чтобы сопоставить существующий код с существующими концепциями - в данном случае парсерами.
Есть ли хороший справочник по парсерам, который я могу купить и прочитать, или даже ссылки в Интернете, которые могут помочь мне создать такое «отображение», учитывая мои слабые теоретические знания?
Если вы не возражаете против языковых различий, глава 8 Perl высшего порядка посвящена синтаксическому анализу и, в частности, создает анализатор рекурсивного спуска с использованием комбинаторов синтаксического анализа. Он доступен (если вы не боитесь Perl) и доступен для чтения бесплатно, если хотите. Это помогло разжечь мой интерес к методам разбора несколько лет назад.
источник
Хотя «Техника синтаксического анализа» - отличная книга, и я прочитал некоторые ее части несколько раз, она сфокусирована на синтаксическом анализе LR, который не будет вам интересен. В вашем конкретном случае вы смотрите на PEG, которые являются своего рода анализом рекурсивного спуска сверху вниз с возвратом в зависимости от порядка альтернатив.
Я хотел бы предложить вам взглянуть на комбинаторы парсеров, которые используют ту же стратегию. Вы можете, например, проверить этот документ http://research.microsoft.com/pubs/65201/parsec-paper-letter.pdf, который использует Haskell для создания комбинаторов синтаксического анализа. Проверьте раздел с тем,
try
где они включают возврат (раздел 3.4).В любом случае, что вам нужно выучить:
источник