Łączenie Xtext z generatorem kodu StringTemplate
W moim obecnym projekcie próbuję połączyć specyfikację DSL napisaną w xtext i generator kodu napisany w StringTemplate.
na przykład składnia mojej specyfikacji DSL jest następująca. Wprowadzam te informacje za pomocą miłych edytorów udostępnianych przez xText.
structs:
TempStruct
tempValue : double;
unitOfMeasurement : String;
abilities :
sensors:
TemperatureSensor
generate tempMeasurement : TempStruct;
attribute responseFormat : String;
Gramatyka wyżej wymienionej specyfikacji DSL jest następująca:
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 ';'
;
XText generuje model semantyczny odpowiadający wyżej wymienionej Specyfikacji. W naszym przykładzie xText generuje model semantyczny, który zawiera pliki, takie jakstruct.java
, Field.java
, Attribute.java
, Sensor.java
itd.
Widzę wyraźnie, że ten semantyczny model można powiązać zStringTemplate
plik. TheStringTemplate
plik pobiera obiekt klasy. Na przykład,StringTemplate
plik trwaTemperatureSensor
(instancja Sensor) jako Input i wygeneruj kod Java.
Moje pytanie brzmi: jak mogę utworzyć instancję modelu semantycznego (generowanego przez xText) i co muszę zrobić, aby połączyć się z plikami StringTemplate?