Wiki
Clone wikiMindStream / Статьи на русском / О кодогенерации / Описываем мета-мета-модель
Предыдущая серия - Отвлечёмся на время от эмуляции объектов. Займёмся мета-моделью и кодогенерацией
Добавил несколько "украшательств".
Вот что получилось:
#!delphi USES metaMACRO.ms.dict ; Test CodeGen // %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-model-end // --------------------------------------------------------------------------- USES CodeDump.ms.dict // - тут подключаем словарь CodeDump.ms.dict, чтобы "увидеть" слово DumpElement ; @SELF DumpElement // - тут дампим элемент CodeGen и его содержимое // в стандартное устройство вывода. // Чисто для отладки того, что мы сейчас написали. ; // CodeGen CodeGen
Опять же - имеем некоторую "самодокументируемость" кода.
Такие слова как:
#!delphi %SUMMARY
#!delphi meta-meta-model-begin
#!delphi meta-model-begin
О ней (самодокументируемости) и как её можно использовать - я как-нибудь позже скажу.
Updated