3 votes

Moteur de script embarqué pour DSL

Je travaille sur un projet qui a besoin d'un DSL embarqué pour répondre aux exigences prévues.

La DSL serait basée sur des événements définis par l'utilisateur. Voici une maquette de la syntaxe souhaitée :

user-defined-event-1 {
    // event body
}

user-defined-event-2 {
    // event body
}

Probablement, la langue la plus similaire que je connaisse sur la base des événements est LSL (de Second Life) .

Ainsi, après avoir lu d'autres questions similaires sur SO, je voudrais demander quel est le meilleur moteur de script embarquable (Ruby, Lua, Python, etc) sur C++ (je travaille en Qt) qui me permet de créer ce DSL.

Dans mon projet, je testerais que le script utilise correctement la syntaxe DSL (au moins un événement défini) et donnerait à l'utilisateur toute la puissance du moteur de script sous-jacent et, si possible, de Qt.

Ce n'est pas une obligation pour que le langage embarqué fonctionne avec Qt. Il peut être isolé, mais il serait bien d'avoir aussi une certaine intégration.

0voto

Maciek Points 4634

Je crois que boost::python est assez facile à mettre en œuvre. J'ai entendu dire qu'il existait aussi des solutions python-Qt.

0voto

coppro Points 10692

Vous semblez avoir des exigences très spécifiques pour choisir un DSL générique. Vous pouvez essayer une bibliothèque de DSL générique (par ex. Boost.Proto ) plutôt qu'un langage intégré préexistant.

0voto

Glenn Points 3787

Pour intégrer un DSL dans votre application, je vous recommande de ANTLR . J'ai utilisé ANTLR au fil des ans, le dernier en date étant dans le cadre d'une Pilote JDBC pour Cassandra . Vous pouvez essayer la version 4 qui a un runtime C++. La version 3 posait problème avec Qt à cause d'une collision avec le mot-clé emit.

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