web-dev-qa-db-fra.com

Mini-langages en Python

Je suis après avoir créé un simple analyseur de mini-langage en Python, une programmation proche du domaine du problème et tout ça.

Quoi qu'il en soit, je me demandais comment les gens ici allaient faire ça - quelles sont les façons préférées de faire ce genre de chose en Python?

Je ne vais pas donner de détails spécifiques sur ce que je recherche car pour le moment, j'étudie simplement à quel point tout ce champ est facile en Python.

Merci pour votre contribution!

45
Reality

Pyparsing est pratique pour écrire des "petites langues". J'ai fait une présentation à PyCon'06 sur l'écriture d'un moteur de jeu d'aventure simple, dans lequel la langue analysée et interprétée était le jeu de commandes du jeu ("inventaire", "prendre l'épée", "drop book" , etc.). (Code source ici .)

Vous pouvez également trouver des liens vers d'autres articles pyparsing sur le pyparsing wiki .

41
PaulMcG

J'ai une expérience limitée mais positive avec PLY (Python Lex-Yacc). Il combine les fonctionnalités Lex et Yacc dans une seule classe Python). Vous voudrez peut-être la vérifier.

Fellow Stackoverflow'er Ned Batchelder a un belle vue d'ensemble des outils disponibles sur son site Web. Il y a aussi un aperçu sur le site Web Python lui-même.

23
Stephan202

Je recommanderais funcparserlib . Il a été écrit spécialement pour analyser les petits langages et les DSL et il est plus rapide et plus petit que pyparsing (voir les statistiques sur sa page d'accueil). Les minimalistes et les programmeurs fonctionnels devraient aimer funcparserlib.

Edit: Au fait, je suis l'auteur de cette bibliothèque, donc mon opinion peut être biaisée.

21
Andrey Vlasovskikh

Python est un langage si merveilleusement simple et extensible que je suggérerais simplement de créer un module python) complet et de coder contre cela.

Je vois que pendant que j'ai tapé ce qui précède, PLY a déjà été mentionné.

5
gnud

Afin d'être productif, j'utiliserais toujours un générateur d'analyseur comme CocoPy ( Tutorial ) pour transformer votre grammaire en un analyseur (correct) (sauf si vous souhaitez implémenter l'analyseur manuellement par souci d'apprentissage).

Le reste est en train d'écrire l'interpréteur/compilateur réel (Créer du code d'octet ou de la mémoire basé sur la pile AST à interpréter puis à l'évaluer).

3
Dario

Si vous me demandez ceci maintenant, j'essaierais la bibliothèque textx pour python. Vous pouvez très facilement créer un dsl avec python! Les avantages sont qu'il crée un AST pour vous, et le lexing et l'analyse sont combinés.

http://igordejanovic.net/textX/

3
Windel