Attualmente sto sperimentando con DSL con xtext. Voglio implementare una soluzione rapida per il dsl che sto scrivendo e mi chiedo, se c'è una possibilità in xtext o xtend hook (o qualcos'altro) di generare un codice frammento dsl dalla grammatica DSL e un dato nodo Ecore .
Ad esempio
Model:
entities+=Entity*;
Entity:
'entity' name = ID ('extends' superType=[Entity])? '{'
attributes += Attribute*
'}';
Convinco che il Supertipo potrebbe non esistere e voglio suggerire un Quickfix (Ctrl + 1) per creare una nuova Entità. So come fare la parte di validazione e sapere dove implementare il quickfix. Ma dal momento che il DSL è in fase di sviluppo, non voglio scrivere due generatori di codice (uno per la creazione di codice DSL e il secondo per il codice derivato dal modello) poiché il DSL è soggetto a modifiche. Immagino che potrebbe esserci una soluzione più generale, dal momento che la grammatica è nota, a causa della definizione della grammatica xtext e del nodo Ecore che voglio creare, il cui nome conosco dal validatore. Immagino anche che non sia l'unico a fornire una tale "caratteristica" e quindi presumo che ci sia già una soluzione che non ho ancora trovato.
La mia domanda, c'è un modo generico in xtext / xtend di costruire un nodo ecore o AST e serializzare quello AST di nuovo in DSL basato su xtext usando la grammatica xtext?