51 votes

Mini-langages en Python

Je cherche à créer un simple mini-analyseur de langage en Python, en programmant au plus près du domaine du problème et tout ça.

Quoi qu'il en soit, je me demandais comment les personnes ici présentes s'y prendraient pour faire cela - quelles sont les méthodes préférées pour faire ce genre de choses en Python ?

Je ne vais pas donner de détails spécifiques sur ce que je cherche parce que pour l'instant je suis juste en train d'étudier à quel point ce domaine est facile en Python.

2 votes

43voto

Paul McGuire Points 24790

Analyse syntaxique est pratique pour écrire des "petites langues". J'ai donné un présentation à PyCon'06 sur l'écriture d'un moteur de jeu d'aventure simple, dans lequel le langage analysé et interprété est le jeu de commandes ("inventaire", "prendre l'épée", "lâcher le livre", etc.) (Code source aquí .)

Vous pouvez également trouver des liens vers d'autres articles sur l'analyse syntaxique dans la section wiki pyparsing .

6 votes

Pyparsing est une bibliothèque absolument fantastique, vous pouvez analyser à peu près n'importe quoi avec un minimum de cérémonie. J'ai construit un analyseur récursif de PHP (analyse statique de code) en deux après-midi en l'utilisant. Je ne saurais trop la recommander. La documentation prend environ 2 heures à lire.

26voto

Stephan202 Points 27707

J'ai une expérience limitée mais positive avec PLY (Python Lex-Yacc). Il combine Lex et Yacc dans une seule classe Python. Vous pouvez l'essayer.

Un collègue de Stackoverflow Ned Batchelder a une bonne vue d'ensemble des outils disponibles sur son site web. Il y a également une vue d'ensemble sur le site Site web Python même.

22voto

Andrey Vlasovskikh Points 6903

Je recommande funcparserlib . Il a été écrit spécialement pour analyser les petits langages et les DSLs 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 : En passant, je suis l'auteur de cette bibliothèque, mon opinion peut donc être biaisée.

6 votes

Il fut un temps où j'étais réticent à promouvoir ou à défendre mon module pyparsing - ne soyez pas timide ! Et n'oubliez pas d'écrire à Ned Batchelder pour qu'il vous fasse part de ses commentaires. funcparserlib ajouté à sa page de compendium des analyseurs, il s'agit d'une ressource commune (et précieuse) pour de nombreux utilisateurs de Python à la recherche d'une bibliothèque d'analyse.

0 votes

Il semble que ce soit une bibliothèque très utile, et le code a l'air très clair ! Merci à tous !

6voto

gnud Points 26854

Python est un langage si merveilleusement simple et extensible que je suggérerais de créer simplement un module python complet et de coder en fonction de celui-ci.

Je m'en aperçois pendant que je rédige ce qui précède, PLY a déjà été mentionnée.

3voto

Dario Points 26259

Pour être productif, j'utiliserais toujours un générateur d'analyseur syntaxique comme CocoPy ( Tutoriel ) pour que votre grammaire soit transformée en un analyseur (correct) (à moins que vous ne souhaitiez implémenter l'analyseur manuellement pour les besoins de l'apprentissage).

Le reste consiste à écrire l'interpréteur/compilateur proprement dit (créer un code d'octets basé sur la pile ou un AST de mémoire à interpréter, puis l'évaluer).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X