УДК 004.42
А. H. АФАНАСЬЕВ, Д. Г. БРАГИН РАЗРАБОТКА АНАЛИЗАТОРА IDEF-ДИАГРАММ
Рассматриваются структура и реализация анализатора диаметральных языков на примере IDEF-диаграмм. В основу положен формализм авторских RV-грамматик. Реализация выполнена для Microsoft Visio.
ф
Ключевые слова: анализ, диаграммные языки, RV-грамматики, редактор VS Visio.
Введение
В последнее время при проектировании автоматизированных систем, средств вычислительной техники, программного обеспечения всё чаще применяются визуальные языки. В сфере разработки программного обеспечения особое место заняла методология Rational Unified Process (RUP), в которой активно используются графические спецификации UML и IDEF [1]. Методология IDEF - это взаимосвязанная совокупность методик концептуального моделирования и проектирования систем.
Для создания диаграмм методик IDEF применяются графические редакторы, которые можно разделить на универсальные и специализированные. Под универсальностью графического редактора подразумевается целый комплекс методов и средств визуальной обработки и представления графической информации. В этом случае применение системы сводится к созданию неформализованных схем и диаграмм, чаще всего в демонстрационных целях. К универсальным можно отнести Microsoft Visio и Dia. Специализированные редакторы используются в рамках только одной предметной области. Такие редакторы оснащены как всеми функциями универсальных графических редакторов, так и рядом дополнительных функций. Примерами специализированных редакторов спецификаций IDEF являются BPWin, ERWin, OOWin. Недостатком как универсальных, так и специализированных редакторов является отсутствие инструмента анализа построенных диаграмм, пользователь, как правило, сам должен проводить синтаксический и семантический контроль построенной модели. В указанных инструментальных средствах отсутствует возможность синтаксически-ориентированной трансляции диаграммы в другие графические и/или текстовые языки, например, в сеть Петри для дальнейшего формального анализа.
© Афанасьев А. Н., Брагин Д. Г., 2011
Таким образом, важной задачей является разработка методов и средств контроля, анализа и перевода диаграмм проектных работ. Изложение материала в данной статье ведётся на примере ЮЕР-диаграмм.
Графические грамматики
Для контроля диаграммных языков и их синтаксически-управляемого перевода в другие представления применяются графические грамматики. Наиболее общими классами графических грамматик являются следующие:
® Грамматики обработки изображений -
ГТ^Ч/Ч П | 1Г\0 1 Г/\Т1/М 1Г ¥ п г»/т г\ а: /-Ч ♦Л П ? II I и^л К »*ч о
ир^дпоопап^гю! для раои^рс* цп^/р^оо^ поиира-
жений, состоящих из пикселей. Используются, когда необходимо распознать пиктограммы с определённым допустимым уровнем ошибок (например, рукописные числа).
® Грамматики предшествования - относятся к грамматикам пространственного разбора, могут использоваться для анализа двухмерных математических выражений и печатных полос, наиболее подходят для синтаксического анализа визуальных предложений из элементарных пиктограмм и пиктограммных операций.
© Контекстно-свободные и контекстно-зависимые грамматики - применяются для анализа композиций визуальных предложений, используя хорошо известные формализмы текстовых грамматик.
• Графовые грамматики - являются самыми мощными средствами анализа визуальных языков, обеспечивают установление контекстных отношений.
Для построения анализатора графических спецификаций методологии ЮЕР используется ЯУ-грамматика [2], которая относится к классу графовых грамматик.
ЯУ-грамматика является развитием и расширением Я, Я8 и Яв-грамматик [3] и предназначена для синтаксического контроля графических языков, которые могут содержать неструктурированность и элементы параллелизма.
ЯУ-грамматикой языка Ь (О называется упо-рядочск I пая пятерка I юпустых м I южеств
С = (У, Е, Е, Я,г0),
где у =: {\у^е-\уЦ - вспомогательный алфавит
(алфавит операций над внутренней памятью);
Е = = ^Г} - терминальный алфавит графического языка, являющийся объединением множеств его графических объектов и связей (множество примитивов графического языка);
% = { а 1 } ~~ квазитерминальный алфавит, являющийся расширением терминального
алфавита. Алфавит £ включает:
■ квазитермы графических объектов;
■ квазитермы графических объектов, имеющих более одного входа;
■ квазитермы связей-меток с определёнными для них семантическими различиями. Связью-меткой является каждая связь, исходящая из графического объекта, содержащего более одного входа или выхода. Допустимо одну из связей такого графического объекта не обозначать как связь-метку. Механизм меток используется для возврата к непроанализированным частям графического образа;
■ квазитерм, определяющий отсутствие связей-меток. Квазитерм по_1аЬе1, определяющий отсутствие связей - меток, используется для прекращения анализа диаграммы при условии выполнения операции над внутренней памятью;
К = {гп / = 0,/} - схема грамматики в (множество имён комплексов продукций, причём каждый комплекс Г1 состоит из подмножества Р1}
продукций гк = {Р1р] = 1,./});
г0 е К - аксиома ЯУ-грамматики (имя начального комплекса продукций), гк е Я - заключительный комплекс продукций. Продукция Р е г1 имеет
вид
а
/ ЯД
определяет отношение над внутренней памятью, Ут - комплекс-преемник.
В качестве внутренней памяти предлагается использовать стеки и магазины для обработки графических объектов, имеющих более одного выхода (чтобы хранить информации о связях-метках), и эластичные ленты для обработки графических объектов, имеющих более одного входа (чтобы отмечать количество возвратов к данной вершине, а, следовательно, количество входящих дуг). Ленты позволяют считывать данные из ячеек без уничтожения их содержимого, а
ячейки лент могут работать в режиме счётчика целых положительных чисел.
Методика построения КУ-грамматпки
Построение Г1У-грамматики реализуется в две фазы: синтез и анализ.
Синтез КУ-грамматики состоит из следующих этапов.
1. Определяется терминальный алфавит контролируемого графического языка, описывается расположение меток, выявляются семантические различия для связей, имеющих общее графическое представление, строится алфавит квазитермов.
2. Строится матрица допустимых паросоче-таний для квазитерминального алфавита.
3. Определяются отношения над внутренней памятью, обеспечивающие эффективный контроль связности графических объектов.
4. По матрице допустимых паросочетаний, т. е. системе отношений, строится граф метаязыка ЯУ-грамматик, вершинам которого поставлены в соответствие имена комплексов правил, а дугам - квазитермы и операции над внутренней памятью.
Анализ осуществляется в два этапа.
1. Устраняются недетерминированности и неопределённости.
2. Производится минимизация ЯУ-грамматики.
ЕУ-грамматика языка ШЕРО
Первым шагом в построении ЯУ-грамматики является построение терминального и квазитерминального алфавитов языка (табл. 1).
Определим отношения над внутренней памятью. Для графического языка ШЕРО операции над внутренней памятью формируются для продукций, содержащих:
• квазитермы связей меток (1аЬе1А, 1аЬе1\\/, 1аЬе1Я);
• квазитермы графических объектов, имеющих более одного входа (А, Я, XV);
® дополнительные квазитермы графических объектов (А, XV);
® квазитермы входов в блок (I, С, М).
Распараллеливание обрабатывается следующим образом. В первый стек заносятся ссылки на связи-метки, исходящие из распараллеливания, в количестве, на единицу меньше общего количества исходящих связей из текущего элемента. Это отношение описывается следующим
^(¿ашЮс-г)))
образом: нгЗ(А: > 1) . Слияния анализатор проходит по элементам XV и XV. Для первого из этих элементов используется операция вида
Алфавит языка IDEFO
Таблица I
Терм Квазитерм Примечание
1—*-*— Y \ г ф /» - А Блок
А Уже проанализированный блок
л R Распараллеливание
м W Слияние
1 W Уже проанализированное слияние
1 rel Связь
I Входной сигнал (вход в блок слева)
С Сигнал управления (вход в блок сверху)
М Сигнал механизма (вход в блок снизу)
labelR Связь-метка из распараллеливания
labelA Связь-метка, исходящая из блока
labelW Связь-метка, исходящая из слияния
nolabel Отсутствие связей-меток |
Следующий шаг - построение матрицы допустимых иаросочетаний (табл. 2).
Таблица 2
Матрица допустимых паросочетаний
rO rl r2 гЗ r4 r5 гб r7 r8 г9 г 10 rl 1 rl2 rk
А А R W W rel I С М labelW labelR labelA nolabel
г0 1
г1 А 1 1 1 1 1 1 1
г2 А 1 1 1 1 1 1 1
гЗ R 1 1 1 1
г4 W 1 1 1 1 1 1 1
г5 W 1 1 1 1 1 1 1
гб rel 1 1 1 1 1 1 1
г7 I 1 1
г8 С 1 1
г9 М 1 1
г 10 labelW 1 1 1 1
г! 1 labelR 1 1 1 1
г12 labelA 1 I 1 1
rk nolabel
) , означающая запись единицы в ячейку с номером I первой ленты, количество связей в ячейку второй ленты и во второй стек - ссылку на связь метку,- исходящую из слияния при условии его анализа впервые. Для второго назначается операция вида
IV1 (жс(тгС1)))
шЗГш:(-1) < ¿-К:))
) _ увеличение значения в ячейке I второй ленты на единицу при условии, что анализ этого слияния может быть продолжен. Для связей-меток 1аЬе1Я, 1аЬе1А определены
отношения вида и>2(Ь1пг7)? (Ь3п) соответственно, они предполагают извлечение из стека
Табличная форма КУ-
и'21>:?п)
ссылки на связь. Отношение и'31.?иг1 == к:~) для 1аЬе1\\^ означает извлечение ссылки на исходящую связь при условии, что все входящие связи уже пройдены. Для входных сигналов, сигналов управления, сигналов механизмов в ленту с номерами 3, 4, 5 заносятся, соответственно, число входов в данный блок.
Построение табличной формы ЯУ-грамматики (табл. 3) производится построчным просмотром матрицы допустимых паросочета-ний. Для каждой встреченной «1» осуществляется запись значения первого столбца данной строки и второй строки данного столбца. После чего к каждой продукции приписываются ранее определённые операции над внутренней памятью.
Таблица 3
грамматики
№ Комплекс Квазитерм Комплекс-приемник ЯУ-отношение
1 Я0 Яе1 Я7 0
2 Я1 Яе1 116 0
3 I 117 0
4 С 118 0
5 м Я9 0
6 !аЬе!\У Г? 1П и'2 (Ь—)
и'ЗГпг1 == А:4*-)
7 1аЬе1Я ЯП И^СЬ1"1)
8 1аЬе1А Я12
9 Я2 Яе1 Я6 0
10 I Я7 0
11 С Я8 0
12 М Я9 0
13 ЬаЬе1\У Я10 \\-3(т:1 == кт2)
14 1аЬе1Я ЯП IV 2(Ь1-)
15 1аЬе1А Я12
16 КЗ Яе1 Я6 0
17 Я4 Яе1 Я6 0
18 I Я7 0
19 С Я8 0
20 м Я9 0
21 1аЬе1\У Я10 н-2 (Ь2тп) иг3('??1г1 == А.'г:)
22 1аЬе1Я ЯП
23 1аЬе1А Я12 \у2(Ь2тл)
24 Я5 Яе1 Я6 0
25 I Я7 0
26 С Я8 0
27 М Я9 0
28 1аЬе1Ш Я10 и'2 (Ь 2?"\) \\'3(т:1 == кг2)
29 1аЬе1Я ЯП 1У2(Ь1?П)
30 1аЬе1А Я12 и-2(у3т)
Окончание табл. 3
№ Комплекс Квазитерм Ko m п л e КС- п p ne m и и к RV-отношемие
31 R6 R R3 w3(k > I)
32 W R4 u'ifl^'1-, k:'-2\ r2m) u-3(ef,1))
33 • W R5 ll'l (jncC^r'1-) j
34 nolabel Rk *
35 R7 А RI vvl(lr3,t3-) u-2(V3)
36 А R2 Wl(inC\7nT3))
37 R8 А RI u-l(lr\t3'n) u-2<V4)
38 А R2 vvl (inc(m:4))
39 R9 А RI ivl(lr5,t3'n) w2(e:*)
40 А R2 \vi(inc(mr"))
41 RIO R R3 u-i(r(i™l(*-i)<) u-3 (k > 1)
42 W R4 u'ifl^.fc^.f^ V ' ' У w3{et<x')
43 W R5 ul (mc(mr,1))j u-3 (m** < *r(:>)
44 nolabel Rk *
45 R11 R R3 wi(r (înKk-D?) u-3 a- > i)
46 W R4 iv3(V(l))
47 W R5 ici (:>1с(771га>) j u-3(mi(i:; < kr(~:!)
48 nolabel Rk *
49 R12 R R3 wl(t*l ml(fc-D)) u-3 a- > î)
50 W R4 u-3(V(l))
51 nolabel Rk *
Задача минимизации ЯУ-грамматики имеет целью построение эквивалентной грамматики, содержащей меньшее количество продукций. ЯУ-грамматика после минимизации представлена в табл. 4.
Реализация анализатора
В качестве практического применения предлагаемой грамматики было реализовано расширение для программного продукта Microsoft Visio, осуществляющее поиск ошибок в построенной модели по спецификации IDEF. Общая структура анализатора представлена на рис. 1.
i аблица4
Табличная форма RV-грамматики после минимизации
№ Комплекс Квазитерм Комплекс-прием ии к RV-отношеиие
1 R0 Rel R4 0
2 R1 Rcl R3 0
3 I R4 0
4 С R5 0
5 M R6 0
6 labelW R7 \v2(b2^) vv3 (mrl - = k:~)
7 label R R7 \Y2(blm)
8 labelA R7 vr2(b3""')
9 R2 Rel R3 0
10 R3 R R2 ^(YCaHU-i») iv3(k > 1)
11 W RI u-3(V":i))
12 W RI iv1 (inc(m:a-')) w3(mt(x' < k:,'z:>)
13 nolabel Rk *
14 R4 A RI w2(et3)
15 A RI vrl(mc(mr3))
16 R5 A RI u-l(l^.f^) vi'2(V4)
17 A RI WlOncC??!*""4))
18 R6 A RI u-l(l :S,t3rn) w2(et5)
19 A RI wl(mc(mr5))
20 R7 R R2 \\'3(k > 1)
21 W RI
22 W RI wl fmc(mrU-)J u-3(mf(1> < кf(-})
23 nolabel Rk *
Рис. 1. Общая структура анализатора IDEF диаграмм для Visio
Существуют два варианта создания расширения для Microsoft Visio.
1. Создание компонента согласно технологии Component Object Model (COM);
2. Создание встраиваемого в документ макроса на языке Visual Basic for Application (VBA).
Плюсы первого варианта являются минусами второго, и наоборот. Так, разработка макроса на языке Visual Basic for Application занимает меньше, времени, но ограничена по функциональности. В силу этого для создания анализатора был выбран первый вариант, так как он обеспечивает более широкие возможности как по работе с объектами самого Visio, так и со сторонними библиотеками и операционной системой в целом. Компонент СОМ представляет собой обычную библиотеку DLL которая зарегистрирована в реестре системы и имеет уникальный номер. Подключение компонента в Microsoft Visio осуществляется из пункта меню Сервис - Надстройки. Непосредственно в компоненте согласно стандарту СОМ необходимо реализовать интерфейс IUnknown, который обеспечивает несколько базовых свойств СОМ [4]: подсчёт количества обращений к объекту и способность вызывать другие интерфейсы, в том числе интерфейсы Microsoft Visio. Через эти интерфейсы становятся доступны все интересующие разработчика объекты Visio, такие как листы, фигуры, связи между фигурами и другие.
Информация по компоненту указывается в ключе Hkey_Local_Computer / Software / Microsoft / Visio / Addins реестра системы для того, чтобы Microsoft Visio мог загрузить данный компонент.
RV-грамматика графического языка хранится в формате XML. Первая секция файла грамматики описывает структуру внутренней памяти, используемой данной грамматикой. Параметрами для каждого элемента памяти являются уникальный идентификатор и тип элемента памяти (О - стек, 1 - эластичная лента). В листинге 1 приведена внутренняя память автомата, состоящая из двух стеков с идентификаторами 1, 4 и двух эластичных лент 2, 3. <memory>
<storage id=,fl" type=n0" /> <storage id=,f2" type="l" /> <storage id="3,f type=f,l" />
<storage id=,f4" type=ff0" /> </memory>
Листинг 1. XML-описание внутренней памяти
Далее следует секция с описанием продукций грамматики, каждая составляющая которой отражает строку табличной формы RV-грамматики
после. Параметры продукции currentState и nextState отражают соответственно текущее и следующее состояния автомата. Далее указывается список операций записи значений во внутреннюю память. Каждая операция записи содержит информацию об идентификаторе элемента памяти storageld и заносимом значении value. Для элемента памяти эластичная лента необходим номер ячейки key, в которую производится запись. После списка операций следует условие выполнения этих операций, параметры у которого те же, что и параметры операций записи. В полях значений и номеров ячеек эластичных лент применяются ключевые символы: t - номер текущего элемента из числа примитивов данного типа, b - номер графического примитива, от которого исходит «управляющий сигнал», к - общее число ссылок, исходящих из графического примитива. Для примера рассмотрим типичную продукцию, xml описание которой представлено в листинге 2. <production>
<currentState>l</currentstatе> <nextState>2</nextState> <operations> coperation key=" t11 value = " 1" /> coperation
key="t" value=f,k"/>
Coperation value="t"/>
</operations> Ccondition key="t11 value=ff0" /> </production>
Листинг 2. XML-описание продукции
RV-грамматики
Данная продукция составлена с учётом структуры внутренней памяти, приведённой в листинге 1. Из описания продукции видно, что текущее состояние автомата - R1, следующее состояние R2. В списке операций над памятью представлена запись в ячейку с номером t второй ленты, запись числа входящих в графический примитив к в ячейку с номеров t третьей ленты и запись ссылки на текущий элемент в четвёртый стек. Данные операции выполняются только при соблюдении условия, описанного в секции condition, а именно, нулевого значения ячейки с номером t второй ленты.
На вход анализатора подаётся список квазитермов графического языка, формируемый из построенной в Microsoft Visio диаграммы, и загружаемая из файла RV-грамматика. Анализатор обрабатывает каждый квазитерм графического
storageId="2" storageId=fl3" storageId="4"
storageId="2?l
языка с применением операции над внутренней памятью и проверкой соответствующих условий.
Алгоритмическая структура анализатора представлена на рис. 2. При обнаружении ошибки программа выводит диагностическое сообще-
Г
1 11 *
1 НиМ.: I;»
V_____У
ние и выделяет местоположение ошибки. При создании анализатора применялась среда разработки Visual Studio 2008, язык программирования С#.
Пч'1
0»;р.ччч ь : «.Ах».Illicit
>4,!4>:pvv.r:nir
<-
л
heil-T;:C\UIII
им|{«ирмации v:f» 1МП;:Г:к;1л
НС Г
Jh.vu'uc'iiu'
ICKYJJLCtO
л л см ст а
Рис. 2. Алгоритмическая структура RV-анализатора IDEF диаграмм
Список выявляемых ошибок
Список выявляемых анализатором ошибок представлен в табл. 5.
Таблица 5
Список ошибок
Графическое представление ошибки Комментарий
+ t Отсутствие входного сигнала
—► I Отсутствие сигнала механизма
—> 1 Отсутствие сигнала управления
i fe» I 1 Отсутствие граничных входных/выходных сигналов
- t -
Окончание табл.5
Графическое представление ошибки Комментарий
—> * > Неправильное направление одного из сигналов
Некорректное распараллеливание
Некорректное слияние
1 Отсутствует блок после распараллеливания
БИБЛИОГРАФИЧЕСКИМ СПИСОК
1. Черемных, С. В. Моделирование и анализ систем. ГОЕР-технологии: практикум / С. В. Черемных, И. О. Семёнов, В. С. Ручкин. - М. : Финансы и статистика, 2002.
2. Шаров, О. Г. Синтаксически-ориенти-рованная реализация графических языков на основе автоматных графических грамматик / О. Г. Шаров, А. Н. Афанасьев // Программирование. -2005.-№6.
3. Афанасьев, А. Н. Ассоциативное микропрограммирование / А. Н. Афанасьев и др. - Саратов : СГУ, 1992.
4. Дональд, Бокс. Сущность технологии СОМ
/ Бокс Дональд. - СПб. : Питер, 2001. ©0©®©©©©@©©©©©©©©©©©
Афанасьев Александр Николаевичу кандидат технических наук, профессор кафедры «Вычислительная техника» УлГТУ.
Брагин Дмитрий Геннадьевичу студент факультета информационных систем и технологии УлГТУ\