CppGenerator.xtend 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package be.uantwerpen.ansymo.semanticadaptation.cg.cpp
  2. import be.uantwerpen.ansymo.semanticadaptation.generator.SemanticAdaptationGenerator
  3. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.Adaptation
  4. import be.uantwerpen.ansymo.semanticadaptation.semanticAdaptation.SemanticAdaptation
  5. import org.eclipse.emf.ecore.resource.Resource
  6. import org.eclipse.xtext.generator.IFileSystemAccess2
  7. import org.eclipse.xtext.generator.IGeneratorContext
  8. class CppGenerator extends SemanticAdaptationGenerator {
  9. var ModelDescriptionCreator mdCreator = new ModelDescriptionCreator()
  10. override void doGenerate(Resource resource, IFileSystemAccess2 fsa, IGeneratorContext context) {
  11. for (type : resource.allContents.toIterable.filter(SemanticAdaptation)){
  12. fsa.generateFile(type.name + ".cpp", type.compile)
  13. mdCreator.name = type.name;
  14. fsa.generateFile("modelDescription.xml", mdCreator.modelDescription);
  15. }
  16. }
  17. // TODO: Verify adaptation.name is not a C++ keyword
  18. // TODO: Add initial value to inputs in the model description file
  19. def CharSequence compile(SemanticAdaptation adaptation) {
  20. var adaptationCharSequence = newArrayList()
  21. for (type : adaptation.elements.filter(Adaptation)) {
  22. mdCreator.CreateInputsOutput(type);
  23. adaptationCharSequence.add(type.compile)
  24. }
  25. return adaptationCharSequence.join('''\n''');
  26. }
  27. def CharSequence compile(Adaptation adaptation) {
  28. return '''compiling «adaptation.toString»''';
  29. }
  30. }