Это всё - "новое прочтение" вот чего - Пример использования шаблонов генерации.
Предыдущая серия была тут - Описываем мета-модель. Технические детали
Там мы описали мета-модель.
Теперь опишем одну из конкретных моделей:
https://bitbucket.org/lulinalex/mindstream/src/6b9f39b15ecc6d83dbcd4219dc2c214f562c7297/Examples/Scripts/CodeGeneration/CodeGen12.ms.script?at=B284
- тут мы описали стереотипы конкретной модели - Project, Library, Programm и Class.
Предыдущая серия была тут - Описываем мета-модель. Технические детали
Там мы описали мета-модель.
Теперь опишем одну из конкретных моделей:
https://bitbucket.org/lulinalex/mindstream/src/6b9f39b15ecc6d83dbcd4219dc2c214f562c7297/Examples/Scripts/CodeGeneration/CodeGen12.ms.script?at=B284
USES metaMACRO.ms.dict ; Test CodeGen // %SUMMARY это мета-информация, которая позволяет привязывать документацию // к элементам кода. Эта документация доступна потом из скриптовой машины. %SUMMARY ' Тут будем тестировать построение сначала мета-модели, потом модели, а потом и кодогенерации ' ; // %SUMMARY // --------------------------------------------------------------------------- meta-meta-model-begin 'Тут будем определять аксиоматику мета-мета-модели, а потом вынесем её в отдельный словарь. ' StereotypeStereotypeProducer meta %SUMMARY ' Определяем базовый элемент мета-модели Тот самый который позволяет тащить всё остальное "за волосы из болота" Через этот примитив выводятся все остальные ' ; // %SUMMARY ; // meta meta-meta-model-end // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- meta-model-begin 'Тут будем определять аксиоматику мета-модели, а потом вынесем её в отдельный словарь. Дальше будем определять понятия из UML - https://ru.wikipedia.org/wiki/UML Там бывают КАТЕГОРИИ и КЛАССЫ (Category и Class) На самом деле разница между ними - "призрачна", но раз умные дяди так решили, то так тому и быть Вот с них и начнём: ' <<@meta>> UMLCategory %SUMMARY ' Категория в терминах UML ' ; // %SUMMARY ; // UMLCategory <<@meta>> UMLClass %SUMMARY ' Класс в терминах UML ' ; // %SUMMARY ; // UMLClass meta-model-end // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- concrete-model-begin 'Модель шаблонов' 'Тут будем определять аксиоматику конкретной модели. Пока - "модели шаблонов". А потом вынесем её в отдельный словарь. ' <<UMLCategory>> Project %SUMMARY ' Наверное у нас при разработке встречаются проекты. Так вот Project это стереотип, который описывает наши проекты. ' ; // %SUMMARY ; // Project <<UMLCategory>> Library %SUMMARY ' Наверное у нас при разработке встречаются проектные библиотеки. Так вот Library это стереотип, который описывает наши библиотеки. ' ; // %SUMMARY ; // Library <<UMLCategory>> Programm %SUMMARY ' Наверное у нас при разработке встречаются программы. Так вот Programm это стереотип, который описывает наши программы. ' ; // %SUMMARY ; // Programm <<UMLClass>> Class %SUMMARY ' Наверное у нас при разработке встречаются проектные классы. Так вот Class это стереотип, который описывает наши проектные классы. ' ; // %SUMMARY ; // Class // Могут ли Library вкладываться в Project, а Project в Library // Или могут ли Programm вкладываться в Class, а Class в Programm // И прочие отношения между стереотипами - мы определим несколько позже. // Когда начнём использовать их. model-end // --------------------------------------------------------------------------- USES CodeDump.ms.dict // - тут подключаем словарь CodeDump.ms.dict, чтобы "увидеть" слово DumpElement ; @SELF DumpElement // - тут дампим элемент CodeGen и его содержимое // в стандартное устройство вывода. // Чисто для отладки того, что мы сейчас написали. help // Выводим всю доступную аксиоматику в стандартное устройство вывода. // Чисто для отладки того, что мы сейчас написали. ; // CodeGen CodeGen
- тут мы описали стереотипы конкретной модели - Project, Library, Programm и Class.
Комментариев нет:
Отправить комментарий