MPS ermöglicht nur die Definition von Textgens pro Konzept.
Die MPS-Art zu tun, was Sie tun möchten, ist dies vor Textgen mit einem Modell zu modellieren Transformation.
Definieren Sie ein zusätzliches Konzept für Ihre drei Objekte, die Sie erstellen möchten. Ihr Inhalt ist im Grunde der gleiche wie im Stammkonzept, das Sie bereits haben. Dieses Konzept wird nur zur Definition Ihres Textgens verwendet. Als nächstes definiere das Textgen für diese Konzepte.
Jetzt müssen Sie noch Instanzen von diesen erstellen, da Sie natürlich nicht möchten, dass der Benutzer diese Informationen mehrfach angibt. Um dies zu tun, müssen Sie einen Generator definieren. Generatoren werden für Modell-zu-Modell-Transformationen in MPS verwendet.
Standardmäßig sollte Ihre Sprache bereits einen Generator haben. Im Generator ist eine Mapping-Konfiguration main
. Dort erstellen Sie eine Root-Zuordnung für jedes der drei neuen Konzepte, die Sie erstellt haben. Jede dieser Regeln hat als Eingabekonzept die vom Benutzer angegebene und als Vorlage eines der neuen Konzepte. Sie können eine neue Vorlage erstellen, indem Sie im Editor auf alt + enter
klicken und das Konzept auswählen, das Sie erstellen möchten. Stellen Sie sicher, dass Sie keep input root
auf true
statt default
setzen.
Innerhalb der Vorlage geben Sie eine COPY_SRC
an, um den gesamten Inhalt vom Eingang zum Ausgang zu kopieren.
Was dann während der Generierung passiert ist, dass MPS drei neue Konzepte erstellen wird, von denen, die der Benutzer im ursprünglichen Modell erstellt hat und nach dem Ausführen der Textgen für alle von ihnen. Dies ermöglicht Ihnen auch, verschiedene Dateien für jeden Root zu erstellen.
Ich denke, das Projekt DEMO 1 zeigt einige der Dinge, die Sie dafür benötigen.
Jeder dieser Informationsobjekte sollten sie eigene Datei haben oder haben Sie sie alle in einer einzigen Datei erstellen? – Kolja
Idealerweise gibt es für jede Schicht unterschiedliche Ausgabedateien, dh eine Ausgabedatei mit allen Modelldefinitionen, eine Ausgabedatei mit den ProtoBuf-Schemadefinitionen usw. Ich habe hier eine Lösung gefunden [https: // mps-support .jetbrains.com/hc/de-us/community/posts/206613545-TextGen-multiple-files-output-per-concept-instance- # community_comment_203694104) - das ist, das wird mir immer noch nicht erlauben, verschiedene Text-Gen-Komponenten für meine nicht zu spezifizieren -root Konzepte. –
eine andere Idee kam mir in den Sinn: Entfernen Sie alle Text-Gen-Komponenten aus meiner eigentlichen Sprache und definieren Sie eine Sprache, die meine Basissprache für jede Ebene/Datei zu generieren erweitert. Diese zusätzlichen Sprachen umfassen nur Textgen-Transformationen, aber keine eigentlichen Sprachkonzepte. Was denken Sie? –