Подтвердить что ты не робот

Мини-языки в Python

Я создаю простой мини-синтаксический анализатор в Python, программируя рядом с проблемным доменом и все такое.

Во всяком случае, мне было интересно, как люди здесь будут заниматься этим - какие предпочтительные способы делать такие вещи на Python?

Я не буду давать подробные сведения о том, что мне нужно, потому что на данный момент я просто изучаю, насколько легко все это поле находится в Python.

Спасибо за ваш вклад!

4b9b3361

Ответ 1

Pyparsing удобен для написания "маленьких языков". Я выступил с презентацией на PyCon'06 по написанию простого движка приключенческой игры, в котором анализируемым и интерпретируемым языком был набор игровых команд ("инвентарь", "взять меч", "бросить книгу", и т.д.). (Исходный код здесь.)

Вы также можете найти ссылки на другие статьи о разборке в вики.

Ответ 2

У меня ограниченный, но положительный опыт работы с PLY (Python Lex-Yacc). Он объединяет функции Lex и Yacc в одном классе Python. Вы можете проверить это.

Сотрудник Stackoverflow'er Нед Бэтчелдер имеет хороший обзор доступных инструментов на своем веб-сайте. Там также есть обзор самого сайта Python.

Ответ 3

Я бы порекомендовал funcparserlib. Он был написан специально для парсинга небольших языков и DSL, и он быстрее и меньше, чем pyparsing (см. Статистику на главной странице). Минималистам и функциональным программистам нравится funcparserlib.

Изменить: Кстати, я автор этой библиотеки, поэтому мое мнение может быть предвзятым.

Ответ 4

Python - это такой удивительно простой и расширяемый язык, что я бы предложил просто создать всеобъемлющий модуль на Python и программировать против него.

Я вижу, что в то время как я напечатал выше, PLY уже упоминалось.

Ответ 5

Чтобы быть продуктивным, я всегда использовал генератор синтаксического анализатора, например CocoPy (Tutorial), чтобы ваша грамматика трансформировалась в (правильный) парсер (если вы не хотите реализовать парсер вручную ради обучения).

Остальное записывает фактический интерпретатор/компилятор (создайте байт-код на основе стека или память AST для интерпретации, а затем оцените его).

Ответ 6

Если вы спросите меня об этом сейчас, я бы попробовал библиотеку textx для python. Вы можете очень легко создать dsl в том, что с python! Преимущества заключаются в том, что он создает для вас AST, а лексирование и синтаксический анализ объединяются.

http://igordejanovic.net/textX/