Verknüpfung von Xtext mit dem StringTemplate-Codegenerator
In meinem aktuellen Projekt versuche ich, die in xtext geschriebene DSL-Spezifikation und den in StringTemplate geschriebenen Codegenerator zu verknüpfen.
Beispielsweise lautet die Syntax meiner DSL-Spezifikation wie folgt. Ich gebe diese Informationen über nette Editorfunktionen von xText ein.
structs:
TempStruct
tempValue : double;
unitOfMeasurement : String;
abilities :
sensors:
TemperatureSensor
generate tempMeasurement : TempStruct;
attribute responseFormat : String;
Die Grammatik der oben genannten DSL-Spezifikation lautet wie folgt:
VocSpec:
'structs' ':'
(structs += Struct)+
'abilities' ':'
('sensors' ':' (sensors += Sensor)+ )+
;
Sensor:
name = ID
((attributes += Attributes ) |
(sources += Sources))*
;
Sources:
'generate' name=ID ':' type = Type ';'
;
Attributes:
'attribute' name=ID ':' type = Type ';'
;
Struct:
name = ID
(fields += Field)+
;
Field:
name=ID ':' type += Type ';'
;
Der xText generiert ein semantisches Modell, das der oben genannten Spezifikation entspricht. In unserem Beispiel generiert xText ein semantisches Modell, das Dateien wie zstruct.java
, Field.java
, Attribute.java
, Sensor.java
, usw.
Ich kann deutlich sehen, dass dieses semantische Modell mit dem verknüpft werden kannStringTemplate
Datei. DasStringTemplate
Datei nimmt Objekt der Klasse. Zum Beispiel,StringTemplate
Datei nimmtTemperatureSensor
(Instanz von Sensor) als Eingabe und Generierung von Java-Code.
Meine Frage ist, wie ich das (von xText generierte) semantische Modell instanziieren kann und was ich tun muss, um mit StringTemplate-Dateien zu verknüpfen?