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

В терминах JNI clone реализуется (или может быть) с использованием метода AllocObject, который создает новый объект без вызова какого-либо конструктора (в отличие от NewObject). Когда у вас есть новый объект, отражение используется для мелкой копии всех полей.

Но опять-таки механизм clone / Clonable принципиально нарушен в Java. У Джошуа Блоха есть раздел об этом в Эффективном Java . Существует также несколько связанных с этим SO вопросов .

43
задан tonfa 10 October 2009 в 12:09
поделиться

5 ответов

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

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

41
ответ дан 26 November 2019 в 21:58
поделиться

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

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

5
ответ дан 26 November 2019 в 21:58
поделиться

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

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

23
ответ дан 26 November 2019 в 21:58
поделиться

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

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

20
ответ дан 26 November 2019 в 21:58
поделиться

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

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

3
ответ дан 26 November 2019 в 21:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: