Я недавно написал парсер на Python, используя Ply (это повторная реализация Python для yacc). Когда я почти закончил с синтаксическим анализатором, я обнаружил, что грамматика, которую мне нужно проанализировать, требует от меня некоторого поиска во время синтаксического анализа для информирования лексера. Без поиска информации у лексера я не могу правильно разобрать строки в языке.
Учитывая, что я могу управлять состоянием лексера из правил грамматики, я думаю, что я решу свой вариант использования, используя справочную таблицу в модуле синтаксического анализатора, но это может стать слишком сложным для обслуживания / тестирования. Поэтому я хочу знать о некоторых других вариантах.
В Haskell я бы использовал Parsec, библиотеку функций синтаксического анализа (известных как комбинаторы). Есть ли в Python реализация Parsec? Или, может быть, какая-то другая библиотека производственного качества, полная функциональности синтаксического анализа, чтобы я мог создать контекстно-зависимый парсер в Python?
РЕДАКТИРОВАТЬ: Все мои попытки анализа без контекста потерпели неудачу. По этой причине я не ожидаю, что ANTLR будет здесь полезен.