Диссертация (1148239), страница 11
Текст из файла (страница 11)
Например, на рис. 11 приведен примервставки группы элементов, состоящей из двух элементов ActionNode языка блоксхем, соединенных ассоциацией в виде ломаной линии. Вставка происходит«внутрь» разделяемой связи, элемент FinalNode при вставке группы соответствующесдвигается вниз.Рисунок 11. Вставка группы элементов “внутрь” ассоциации3.4. ЗаключениеВ данной главе рассмотрены способы упрощения работы с диаграммным62редактором платформы QReal. Самым важным результатом здесь является методавтоматическогосозданиякомпонентраспознаванияжестовDSM-решений.Подобные компоненты создаются без какого-либо участия разработчика поформальному описанию визуального представления элементов языка и позволяютавтоматизировать наиболее часто повторяющиеся при моделировании действия:создание и удаление элементов на диаграммах и связей между ними.
Также вредактор была добавлена реализация некоторых эвристик языка ДРАКОН, которыепозволили уменьшить число операций, необходимых при добавлении элементов науже существующие диаграммы и при создании групп элементов.63Глава 4. Средства задания исполнимой семантики4.1. ВведениеВ данной главе рассматривается метод, позволяющий создавать отладчики иинтерпретаторы моделей посредством задания операционной семантики визуальныхязыков. Кратко описываются существующие для этого формализмы (подробныйобзор см. в Приложении В), приводится описание подхода, выбранного к реализациив данной работе.
Рассматриваются особенности реализации подхода в рамкахплатформы QReal.4.2. Семантика языковВ теории языков программирования выделяют четыре основных типа семантик:операционная, денотационная, аксиоматическая и трансляционная. Подобноеделение существует и для визуальных языков.Денотационная семантика была описана в работе [142].
Обычно при такомподходе в качестве семантической области используются некоторые математическиеобъекты или функции, называемые денотациями (denotation), а соответствиеконструкций языка этим объектам задаётся рекурсивно, т.е. денотация длявыражениядолжнасоставлятьсяизденотацийподвыражений.Частоэтосоответствие задаётся при помощи λ-исчисления. Данный тип семантик являетсяматематически строгим и формальным, но в чистом виде порой не обладаетдостаточной степенью понятности для неспециалистов.Операционная семантика также является математически строгой и бывает двухтипов: структурная операционная семантика (семантика малого шага, [101]) иестественнаясемантика(семантикабольшогошага,[135]).Структурнаяоперационная семантика состоит из набора правил, при помощи которых64исполнение конкретной программы на данном языке будет представлено в видепоследовательности индивидуальных вычислительных шагов.
После примененияэтих правил могут оставаться некоторые остаточные вычисления, учитывающиесяпри дальнейшем представлении программы в виде набора вычислительных шагов.Естественная семантика такие остаточные вычисления запрещает и сразуопределяет, каким образом по выражению будет получен конечный результат.Аксиоматические семантики [91] представляют собой набор логических аксиом.Для них любые выражения, записанные на данном языке, рассматриваются в виделогических формул, значение которых будет формально выведено из исходногонабора аксиом.Ещё одним важным типом семантик являются трансляционные [148].
Онисостоят из набора правил преобразования моделей, с помощью которых модель наисходном языке переводится в модель на другом языке, для которого уже заданасемантика исполнения. Например, часто это сводится к генерации кода на языкеобщего назначения, для которых существуют компиляторы и отладчики (Java, C++,Python и т.п.). Такой подход, с одной стороны, требует от разработчика знаний сразув обеих областях (исходной и целевой), а с другой — является хорошовоспринимаемым, т.к.
понятия абстрактной исходной предметной области переходятв конкретные конструкции исполнимого языка.В приложении B и [42] рассмотрен также ряд конкретных подходов к заданиюсемантикивизуальныхиспользующихсявязыков,программныхпредложенныхсредствах.вразличныхСредствазаданияработахисемантикирассматриваются в первую очередь как инструмент автоматизированного созданияпошаговых интерпретаторов и отладчиков целевых языков, а также генераторовисходного кода по визуальным моделям.654.3.
Задание исполнимой семантики в QRealПо результатам исследования и анализа существующих способов заданиясемантики визуальных языков был предложен метод, реализованный применительнок платформе QReal [40, 43]. Он основан на правилах преобразованиях графов,задаваемых, как в DMM-подходе и AToM3 в графическом виде, а также имеетнекоторое подобие языка действий из xUML для задания операций, осуществляемыхпри выполнении правила.Рассмотрим основные особенности предлагаемого подхода.4.3.1. Семантическая модельПриформализациисемантикивизуальногоязыкаипоследующегоиспользования этой семантики для исполнения моделей может понадобитьсядобавитьэлементамданногоязыкадополнительныйнаборспецифическихатрибутов.
Например, элементам языка, описываемого формализмом сетей Петри,можно добавить дополнительный атрибут, указывающий, содержит ли данныйэлемент в настоящее время токен исполнения или нет. Начальному элементудиаграммы можно поставить логический атрибут, указывающий, исполняется лиданная диаграмма в настоящий момент или нет.В предлагаемом решении для задания семантики элементов используетсяспециальное расширение метаредактора QReal, содержащего стандартный наборсредств для добавления новых атрибутов к элементам и создания новых элементов.После всех необходимых добавлений генерируется новая метамодель целевоговизуального языка, содержащая все его элементы вместе с их семантикой. Этаметамодель автоматически компилируется средствами QReal в подключаемыймодуль редактора и последний загружается в работающую систему.
В дальнейшемпользователь работает только с этим полученным языком с добавленной семантикойэлементов и создаёт модели, подлежащие интерпретации, именно на нём.66Разумеется, эти дополнительные атрибуты имеют смысл только в рамкахработы с семантикой данного элемента и не должны пересекаться с другимиатрибутами:например,семантическиеатрибутынедолжныотображатьсяпользователю в редакторе свойств, а использоваться лишь при интерпретацииправил семантики (например, вышеупомянутое свойство элементов языка сетейПетри будет использоваться для отслеживания перемещения токенов по модели приее интерпретации).
Любая модель на некотором визуальном языке представляется вQReal в виде логической и графической моделей, взаимосвязанных друг с другом(см. раздел 5.3.4). К данному разделению имеет смысл добавить новуюсемантическую модель, которая бы содержала эти новые специфические служебныеатрибуты и процедуры. По аналогии с логическими и графическими моделямидоступ к семантическим атрибутам элементов для интерпретаторов и генераторовдолжен осуществляться через специальное API репозитория (SemanticRepoApi).Также к семантике элементов возможен доступ из редактора семантики визуальногоязыка.4.3.2.
Редактор семантики визуального языкаРедактор семантики визуального языка генерируется автоматически также наоснове полученной на предыдущем шаге расширенной метамодели исходного языка.Семантика визуального языка в QReal представляет собой набор правилпреобразования графов, пошаговое применение которых к графу исходной моделипозволяет визуализировать процесс интерпретации или осуществить генерацию кодапо модели. При исполнении модели на каждом шаге выбирается правило снаивысшим приоритетом (если таких несколько, то берётся произвольное) илислучайное правило, которое может быть применено к модели, если приоритетыправил не заданы. Далее правило применяется в первом найденном подходящемместе. Принцип работы такого процесса напоминает выполнение алгоритмовМаркова на строках, а наличие приоритета позволяет упорядочить возможное67применение правил.Редактор семантики позволяет задавать правила преобразования моделейвизуально с помощью специального языка, состоящего из следующих элементов.●Элемент SemanticsRule является контейнером для всех остальных элементов.
Внего помещаются левые и правые части правил, при необходимостисовмещенные вместе (по аналогии с тем, как это описано в DMM-подходе, см.Приложение B). Задание факта создания и удаления элементов происходит припомощи добавления к ним меток “@new@” и “@deleted@” соответственно.●Связь Replacement позволяет задать факт замены одного элемента на другой (ссохранением всех связей, входящих и исходящих из заменяемого элемента).●Элемент ControlFlowMark используется в правилах для того, чтобы задатьтекущее положение потока управления (аналог токена в сетях Петри) —показать, какой элемент будет считаться текущим с точки зрения исполнениямодели после применения данного правила.
Существует два варианта егоиспользования — либо соединение элемента ControlFlowMark с целевымэлементом правила с помощью специальной связи ControlFlowLocation, либопомещение его внутрь целевого элемента как в контейнер (второй способ дляряда случаев позволяет создавать более компактные и наглядные правила). Вовремя выполнения модели, т.е. при применении очередного правила,происходит подсветка элементов, ассоциированных с элементами типаControlFlowMark в рамках данного правилах.●Элемент Initialization используется для определения типа семантики языка —будет ли она использоваться для создания интерпретатора и/или генераторакода по моделям.
Также этот элемент используется для определения правилначальной инициализации процесса интерпретации, задаваемых в текстовойформе (см. раздел 4.3.3).●Элемент Wildcard вляется унификатором элемента модели. При поиске68шаблона во время применения правила элемент Wildcard будет даватьуспешный результат сопоставления с любым элементом модели.●Все элементы целевого языка также могут быть использованы при описанииправил. Элемент или связь типа X, помещенный в правило, будетсоответствовать любому элементу или связи типа X модели, над которой этоправило применяется.Во время поиска левой части правила при сравнении элементов правила иэлементов в модели проверяется равенство не только типов этих элементов, но изначений их атрибутов.
В редакторе можно задавать значение как обычныхатрибутов элементов, так и семантических. Если атрибут какого-то элемента правилане проинициализирован, то значение этого атрибута у элемента в модели можетбыть любое. При добавлении нового элемента в правило все его атрибутыавтоматически не проинициализированы. Если ни тип, ни атрибуты элемента вправиле не важны, то можно использовать унификатор узла или связи. Как былоотмечено выше, сравнение любого элемента модели того же класса (узел или связь) сними будет возвращать истину.Также для каждого правила можно определить его приоритет и выбратьтекстовый интерпретируемый язык, на котором будут записываться ограничение иреакция на применение соответствующего правила (см.
раздел 4.3.3). Простейшийвариант приоритета — целое число. В общем случае, приоритет — это значениенекоторой функции, заданной на атрибутах элементов правила, т.е. приоритетправила зависит от конкретного места в исходной модели. Например, если у каждогоэлемента модели задан целочисленный вес, а правила в первую очередь должныприменяться к подграфам с максимальным суммарным весом элементов.