Генератор парсера Python3 - PullRequest
3 голосов
/ 26 мая 2011

Я ищу генератор синтаксического анализатора для достаточно сложного языка (похожего по сложности на сам Python), который работает с Python3. Если он может генерировать AST автоматически, это было бы бонусом, но я в порядке, если он просто вызывает правила при разборе. У меня нет особых требований, и при этом он не должен быть очень эффективным / быстрым.

Ответы [ 2 ]

3 голосов
/ 26 мая 2011

ANTLR может генерировать лексер и / или анализатор в Python. Вы также можете использовать его для создания AST-структур и структур, подобных итераторам, для обхода AST (так называемых древовидных грамматик).

См. ANTLR для получения и разделения содержимого лексера для демонстрации ANTLR, которая создает AST с целью Python.

3 голосов
/ 26 мая 2011

LEPL не совсем генератор парсера - он лучше!Парсеры определены в коде Python и созданы во время выполнения (отсюда некоторая неэффективность, но гораздо проще в использовании).Он использует перегрузку операторов для создания вполне читаемого DSL.Такие вещи, как c = a & b | b & c для BNF c := a b | b c..

Вы можете передавать результаты (под) синтаксического анализатора в вызываемую по абрите, и это очень удобно для генерации AST (также полезно для преобразования, например, числа).литералы для объектов числа уровня Python).Это парсер рекурсивного спуска, поэтому вам лучше избегать левой рекурсии в грамматике (существуют объекты-памятники, которые могут заставить работать левую рекурсию, но "Поддержка Лепла для них исторически была ненадежной (ошибочной)" ).

...