USES 'W:\shared\models\NewSchool\Templates\Core.tpl.script' ; // Тут описываем слова, необходимые для построения дерева разбора модели MDA вылитой в формат скрипта StereotypeStereotypeProducer MDAClass ; // - базовый стереотип, через который всё выводится <<@MDAClass>> MDAClass ; <<@MDAClass>> MDACategory ; // - заглушки для начальной раскрутки <<MDACategory>> Project ; // - проект <<@MDAClass>> MDAAbstractClass ; <<@MDAClass>> MDADependency ; <<@MDAClass>> MDAAttribute ; //StereotypeProducer MDAStateMachine ; //StereotypeProducer MDAState ; //StereotypeProducer MDATransition ; //StereotypeProducer MDATransitionAttribute ; //StereotypeProducer MDAStateAction ; // - а эти парни вообще выводятся на модели из первых двух <<@MDAClass>> MDAOperation ; // - стереотип для создания типов операций <<MDACategory>> MDATemplates ; <<MDACategory>> MDALibrary ; // - MDA-библиотека <<MDACategory>> MDALayer ; <<MDAClass>> MDAUtilityPack ; // - набор утилитных функций MDA <<MDAClass>> MDAGenerator ; StereotypeProducer mdalink ; <<mdalink>> group ; <<mdalink>> include ; <<mdalink>> main_hierarchy ; <<MDAOperation>> generator ; // - генератор элементов модели <<MDAOperation>> transformator ; // - трансформатор (аналог CASE в mda-генераторе) <<MDAOperation>> Operation ; // - операция (любая, что MDA, что нет - любая операция без стереотипа) <<@MDAClass>> MDAParameter ; // - стереотип параметра //WordAlias <<param>> <<MDAParameter>> //<<MDAParameter>> param ; StereotypeProducer param ; <<param>> in ; // - входной параметра (изменяться не может) StereotypeProducer up ; // - стереотип для типов пользовательских свойств <<up>> bool ; // - булево значение UP <<up>> string ; // - строковое значение UP <<up>> list ; // - значение UP из заранее заданного списка значений <<up>> color ; <<up>> tribool ; // - трёхпозиционное значение UP undefined/false/true <<up>> text ; <<MDAClass>> MDAReport ; <<MDAOperation>> report ; : UIDS_LIST ; // - список загруженных элементов IMMEDIATE VOID CALLER operator %UID ^L IN anUID VAR l_S anUID |^@ |N =: l_S // - получаем имя (значение) UID VAR l_VAR UIDS_LIST ->^ l_S >>> l_VAR // - добавляем переменную и снимем её со стека Caller -> %U := l_VAR // - добавляем элементу переменную, указывающую на его UID l_VAR ^:= Caller // - присваиваем в переменную с UID ссылку на сам элемент ; // %UID // - идентификатор элемента //NamedInitedVarProducer %DOCUMENTATION %Doc // - документация к элементу //NamedAutolinkProducer %UIDLINK %U // - ссылка на элемент по UID NamedAutolinkProducer %VALUE %V // - значение элемента NamedWordProducer %VALUES %Vs // - список возможных значений NamedAutolinkProducer %TARGET %T // - цель (тип) элемента /*{WORDWORKER U$ VAR l_S WordToWork DO =: l_S UIDS_LIST ->^ l_S DO ; // U$}*/ VOID IMMEDIATE operator U$ ^L IN anUID VAR l_S anUID |^@ |N =: l_S UIDS_LIST ->^ l_S CompileValue ; // U$ // - преобразование идентификатора элемента собственно к элементу WORDWORKER N$ WordToWork DO ; // - преобразование "значения" элемента собственно к элементу (если это возможно), иначе так и возвращается значение NamedWordProducer %DEPENDS %D // - список зависимостей //IMMEDIATE OPERATOR %INCLUDES // @ INCLUDES DO //; // %INCLUDES NamedWordProducer %REALIZES %OR // - список реализованных методов NamedWordProducer %OVERRIDES %OO // - список перекрытых методов NamedWordProducer %PARAMETERS %Pars // - список параметров NamedWordProducer %INDEXES %Idxs // - список индексов WordProducer %INDEX // - отдельный индекс NamedWordProducer %LINKS %Lnks // - список связей элемента NamedWordProducer %ATTRIBUTES %Attrs // - список атрибутов элемента WordAlias ATTRIBUTES %ATTRIBUTES NamedWordProducer %OPERATIONS %Ops // - список операций элемента //NamedWordProducer %CHILDREN %C // - список дочерних элементов элемента NamedWordProducer %META %UPs // - список пользовательских свойств //VarProducer upv InitedVarProducer %upv // - значение пользовательского свойства /*{BOOLEAN FUNCTION NotValid IN %S if ( %S IsVoid ) then ( Result := true ) else if ( %S pop:object:IsNil ) then ( Result := true ) else ( Result := false ) ;}*/ /*{STRING FUNCTION |N IN %S if ( %S NotValid ) then ( Result := '' ) else ( Result := ( %S pop:Word:Name ) ) ;}*/ /*{OBJECT FUNCTION %ST IN %S if ( %S NotValid ) then ( Result := nil ) else ( Result := ( %S pop:Word:Producer ) ) ;}*/ /*{STRING FUNCTION |S IN %S %S %ST |N =: Result ;}*/ /*{FUNCTION ->0 OBJECT IN %S Result := ( ( 0 %S pop:Word:GetParam ) DO ) ; // ->0}*/ STRING CALLER operator %SN Result := ( Caller ->0 |N ) ; STRING CALLER operator %SS Result := ( Caller ->0 |S ) ; //IMMEDIATE CALLER operator [EXPORTED] //; // - похоже - пока не понадобилось, ввёл вместо него [EXPORT] IMMEDIATE operator [EXPORT] ^ REFERENCE IN WordToWork if ( WordToWork |S '<<MDAUtilityPack>>' SameText ! ) then ( // - пока не экспортируем <<MDAUtilityPack'>> - не очень пока понятно - как, куда и зачем это делать WordToWork pop:Word:PublicateInMainDictionary ) ; // - экспортирует указанное слово в основной словарь IMMEDIATE operator implementation ^ IN WordToWork // - открывает секцию реализации стереотипа, все методы внутри секции относятся к указанному после вызвавшего слова стереотипу // // Пример: // implementation @ <<Unit>> // // : NewMethod // 'Hello' . x1 // ; // // end. // Ctx:PushCompiler Ctx:PushFinder VAR l_NewCompiler WordToWork DO =: l_NewCompiler l_NewCompiler pop:Compiler:SetToCtx l_NewCompiler pop:Finder:SetToCtx ; IMMEDIATE operator end. // - закрывает секцию реализации стереотипа pop:Finder:SetToCtx pop:Compiler:SetToCtx ;
Заметки о тестировании, программировании и прочий "поток сознания", который жалко писать "в стол"
вторник, 7 июля 2015 г.
Ни о чём. Аксиоматика шаблонов кодогенерации
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий