Question

Je travaille sur une connexion DSL assez complexe que je veux compiler vers le bas dans quelques langages de haut niveau. L'ensemble du processus a été une expérience d'apprentissage. Le compilateur est écrit en java.

Je me demandais si quelqu'un connaissait une meilleure pratique pour la conception de la partie du générateur de code. J'ai actuellement tout analysé en une arborescence de syntaxe abstraite.

Je pensais à l'aide d'un système de modèle, mais je ne l'ai pas étudié cette direction trop loin encore que je voudrais entendre une certaine sagesse d'abord de débordement pile.

Merci!

Était-ce utile?

La solution

Quand je faisais ce retour dans ma classe des langages de programmation, nous avons fini par les émetteurs en fonction de la suite de la motif visiteur . Cela a fonctionné assez bien - fait reciblage à de nouvelles langues de sortie assez facile, aussi longtemps que votre AST correspond à ce que vous imprimez assez bien

.

Autres conseils

Qu'est-ce que vous voulez vraiment est un de , que les structures de syntaxe de cartes dans une langue (DSL) dans des modèles de syntaxe dans d'autres langauges. Un tel outil peut effectuer des transformations arbitraires (arbres réécritures généralisent string-réécritures qui sont des systèmes post qui sont Turing complet capables) au cours du projet de génération de code, ce qui signifie que ce que vous générez et la sophistication de votre processus de génération est déterminée uniquement par votre ambition , et non par des propriétés "code-cadre de générateur".

systèmes de transformation du programme Sophtisticated combinent différents types de cadrage, analyse des flux et / ou analyseurs personnalisés pour permettre aux Transformations. Cela n'ajoute pas de puissance théorique, mais il ajoute beaucoup de puissance pratique:. Les langues les plus réelles (même) ont DSLs namespaces, le contrôle et le flux de données, ont besoin d'inférence de type, etc., etc

DMS Software Reengineering Toolkit est ce type de système de transformation. Il a été utilisé pour analyser / transformer les deux langues conventionnelles et, pour les langues DSLs simples et complexes, et pour les petits, grands et même les systèmes logiciels énormes.

associés aux commentaires par OP à propos de

Si vous utilisez déjà ANTLR et que votre AST prêt, vous voudrez peut-être jeter un oeil à StringTemplate: http://www.antlr.org/wiki/display/ST/StringTemplate+ documentation

Aussi la section 9.6 de Le ANTLR définitif Référence: bâtiment Langues spécifiques au domaine explique ceci: http://www.pragprog.com/titles/tpantlr/the- définitif-antlr référence

Les exemples de code sont disponibles gratuitement à http: // médias. pragprog.com/titles/tpantlr/code/tpantlr-code.tgz. Dans les modèles code de \ sous-dossier \ générateur \ 2passes \ vous trouverez un exemple de conversion des expressions mathématiques à Java bytecode.

DSL est une bonne chose. Et les écrire est une bonne pratique.

Mais je ne suis pas sûr que la mise en œuvre de votre propre YACC et similaire est un bon choix en 2010, à moins qu'il soit juste pour le plaisir ou éducatif.

Quand vous aurez terminé votre processus éducatif et va commencer à chercher une belle façon de mettre en œuvre vos DSLs, vous pouvez envisager d'utiliser les langages dynamiques.

En utilisant Groovy par exemple, vous pouvez mettre en œuvre vos petits et grands DSLs très facile et agréable façon.
BTW Groovy a construit en api de manipulation AST.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top