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