Недавно я написал парсер в Python, используя Ply (это повторная реализация yacc python). Когда я почти закончил с парсером, я обнаружил, что грамматика, которую мне нужно разборки, требует от меня взглянуть вверх во время разбора, чтобы сообщить лексеру. Не обращая внимания на lexer, я не могу правильно разобрать строки на этом языке.Python реализация Parsec?
Учитывая, что я могу контролировать состояние lexer из правил грамматики, я думаю, что я буду решать свой пример использования, используя таблицу поиска в модуле синтаксического анализатора, но может быть слишком сложно поддерживать/тестировать. Поэтому я хочу узнать о некоторых других вариантах.
В Haskell я бы использовал Parsec, библиотеку функций синтаксического анализа (известных как комбинаторы). Есть ли Python-реализация Parsec? Или, возможно, какая-то другая библиотека качественного качества, полная функциональности синтаксического анализа, поэтому я могу создать контекстно-зависимый парсер в Python?
ИЗМЕНИТЬ: все мои попытки контекстного анализа синтаксических ошибок провалились. По этой причине я не ожидаю, что ANTLR будет полезен здесь.
В моем случае мне нужно больше, чем традиционный синтаксический анализ позволяет. Все мои попытки написать традиционный контекстный свободный парсер упали на их лице по теоретическим соображениям. Я довольно уверен в этом, что мне нужно условное лексирование как минимум. Будет ли применяться ANTLR? – 2008-09-18 18:03:13
У вас есть * lookahead с ANTLR, и если вам нужно, вы можете добавить синтаксику и предикаты к вашей грамматике (существуют также предикаты семантики). Использование antlrwork, это действительно полезно для разработки/отладки грамматики (http://www.antlr.org/works/index.html). На сайте ANTLR есть готовые грамматики. – 2008-09-19 13:39:04