Подсистема генерации единого внутреннего представления в системе преобразований программ

дем следующие обозначения. Пусть М - множество БЗ; теМ - некоторая БЗ; О - множество объектов. Тогда обозначим О(т)сО - множество примеров; О\О(т) - множество контрпримеров для БЗ теМ. Пусть V - множество выборок; уе V - конкретная выборка (конечное множество объектов - элементов О), усО.

В основе любого метода ИФЗ лежит некоторый класс БЗ (моделей) М. Метод ИФЗ решает обратную задачу вычисления значения некоторого отображения V^M, то есть на основе имеющейся выборки у метод выбирает одну из БЗ т (у). Идея предлагаемого общего подхода состоит в том, чтобы для получения модельных данных, необходимых для экспериментальных исследований свойств метода ИФЗ, явно представить класс БЗ М. Далее на основе этого явного представления разработать алгоритмы решения следующих прямых задач: случайного выбора (или генерации) БЗ т из М; случайной генерации выборок модельных данных у(т) различного объема на основе БЗ т; каждая из таких выборок у(т) представляет собой объединение выборки примеров уп(т)сО(т) и выборки контрпримеров укп(т) сО\О(т).

После этого в процессе экспериментального исследования, применяя метод ИФЗ к сгенерированным выборкам модельных данных у(т) разного объема, можно получать различные ИФБЗ

т*(у) и, используя их оценки, получать оценки свойств метода ИФЗ: внешнего и внутреннего качества, времени работы, а также устойчивости в зависимости от объема выборок. При этом оценка внешнего качества ИФБЗ - это оценка процента ошибок 1-го рода т (у) на контрольной уп(т) и оценка процента ошибок 2-го рода т (у) на контрольной укп(т). Первая представляет собой долю элементов уп(т), соответствующих ИФБЗ т*(у), от объема уп(т), вторая - долю элементов укп(т), не соответствующих ИФБЗ т*(у), от объема укп(т). Оценка внутреннего качества - это оценка сходства т и т*(у). Оценка устойчивости может быть получена с помощью генерации выборок различного объема и анализа разброса значений свойства метода ИФЗ для этих выборок.

Таким образом, предлагаемый подход свободен от трудностей, связанных с экспериментальными исследованиями свойств методов ИФЗ на реальных данных, и позволяет проводить подобные исследования на большом числе выборок различного объема. Результаты экспериментальных исследований методов ИФЗ (значения свойств этих методов на различных объемах выборок) могут быть использованы в качестве наполнения каталога свойств методов ИФЗ, в котором явно приведены их свойства и значения этих свойств для каждого метода.

ПОДСИСТЕМА ГЕНЕРАЦИИ ЕДИНОГО ВНУТРЕННЕГО ПРЕДСТАВЛЕНИЯ В СИСТЕМЕ ПРЕОБРАЗОВАНИЙ ПРОГРАММ

М.А. Князева, к.т.н.; В.А. Тимченко

Традиционно анализ, распараллеливание и преобразования программ выполняются над программами, представленными не на языках программирования высокого уровня, а посредством различных схем и моделей, которые являются удобным представлением для обработки исходных программ (например, схемы Мартынюка, Лаврова, представления программ в виде различных графов) и подробно описаны (см., напр.: В.В. Воеводин, Вл.В. Воевоедин "Параллельные вычисления" (2002); В.Н. Касьянов "Оптимизирующие преобразования программ"(1988)).

Внутренние представления в системах оптимизации и распараллеливания программ, как правило, реализуются в виде таких структур, как списки, деревья, графы. В некоторых системах (например, Polaris, SUIF/SUIF2, открытая распараллеливающая система (ОРС)) внутреннее представление программ реализовано в виде иерархии

классов на объектно-ориентированном языке. Основное преимущество представления в таком виде - это простота проектирования, модифицируемость и расширяемость.

ОРС предполагает открытость к возможным изменениям в языке исходных текстов за счет дописывания или замены относительно небольших программ.

Многие системы для построения внутреннего представления программ, в том числе и ОРС, SUIF/SUIF2, используют внешние программы или библиотеки (ANTLR, Sage++, Bison, YACC, компиляторы Portland Group Inc.) с готовыми грамматиками языков, что ставит их в зависимость от сторонних разработчиков. При описании же собственных грамматик данные инструментальные средства, как правило, накладывают ограничения на их класс. Кроме того, приходится проводить определенную работу по интеграции представле-

ния программ, получаемых компиляторами переднего плана, основанными на таких инструментальных средствах, и собственными внутренними представлениями.

Таким образом, во многих системах возможности расширения на предмет добавления поддержки новых языков ограничены отсутствием собственного синтаксического анализатора (SUIF/SUIF2, Cetus) или ориентированностью их внутреннего представления программ на конкретный язык (Polaris, Parafrase).

Попыткой обойти подобного рода ограничения явилась разработка структурно-предикативной системы СПОРК, основанной на реализации структурных предикативных грамматик и средств работы со структурным графом. Структурный граф является внутренним представлением программ, используемым в данной системе.

Внутреннее представление является здесь результатом синтаксического и контекстного анализа программы с помощью структурно-предикативной грамматики (СП-грамматики).

СП-грамматика относится к классу логических грамматик, в которых описание правил ведется на языке первого порядка в терминах термов и логических формул. Оперирование таким языком может оказаться весьма затруднительным для пользователей этой системы, не являющихся специалистами в области математической логики. Помимо этого для работы с системой пользователю необходимо знать структуру внутреннего представления программ.

В отделе интеллектуальных систем ИАПУ ДВО РАН (г. Владивосток) разрабатывается система преобразований программ (СПП), предназначенная для проведения исследований в области преобразований программ. Одним из требований, предъявляемых к данной системе, является поддержка расширяемого набора языков программирования исходных текстов программ, которые затем должны переводиться в единое промежуточное представление. Исходя из данного требования, в рамках решения проблемы обеспечения много-языковости в системе преобразований программ, управляемой знаниями, была предложена концепция подсистемы генерации единого внутреннего представления программ. Предлагаемый подход позволяет преодолеть упомянутые выше недостатки и ограничения, присутствующие в существующих системах преобразования и распараллеливания программ.

Концепция подсистемы генерации единого внутреннего представления в СПП

Рассмотрим архитектуру подсистемы генерации единого внутреннего представления в контексте СПП (рис.1). Подсистема состоит из следующих компонент: редактор проекций языков программирования высокого уровня на единое пред-

ставление, генератор единого представления программ и инструментальное средство, осуществляющее анализ и синтез текстов (АИСТ), разработанное в отделе интеллектуальных систем ИАПУ ДВО РАН. Подсистема управления, также являющаяся частью СПП, связывает эти компоненты друг с другом, осуществляя передачу информации и управления между ними.

Редактор проекций языков программирования высокого уровня на единое представление представляет собой структурный редактор, процесс редактирования в котором управляется моделью онтологии проекций языков программирования на единое представление. Это означает определенную поддержку процесса редактирования со стороны редактора. Модель онтологии накладывает ограничения на вид и структуру редактируемой информации, что требует при редактировании от пользователя лишь доопределения информации там, где это необходимо. При этом на каждом шаге процесса редактирования редактор предоставляет ему всю необходимую информацию для осуществления очередного шага редактирования (например, предлагает, где это возможно, допустимые варианты редактирования информации).

Сама модель онтологии может быть модифицирована с помощью редактора информации различного уровня общности. Все изменения соответствующим образом немедленно отобразятся на процессе редактирования проекций (без необходимости перезапуска редактора проекций). С помощью данного редактора формируется и развивается база проекций языков программирования на единое представление.

Инструментальное средство АИСТ используется для осуществления процедуры синтаксического анализа текстов программ и формирования представления этих программ в абстрактном синтаксисе.

При анализе текстов программ необходимо иметь дело со следующими видами информации.

Модель онтологии языка программирования. Онтология языка программирования представляет собой совокупность информации, описывающую множество понятий данного языка, а также взаимосвязь между этими понятиями, то есть способ их объединения в языковые конструкции. Можно сказать, что онтология языка определяет абстрактный синтаксис этого языка. Модель онтологии языка представлена семантической сетью понятий, связанных между собой направленными дугами и снабженной специальной разметкой.

Связь онтологии языка с конкретным синтаксисом языка. Данный вид информации определяет содержание правильных конструкций языка с точки зрения синтаксиса этого языка. Связь онтологии языка с его конкретным синтаксисом содержит такие элементы языка, как пунктуа-

Модель онтологии Текст программы

языка на языке

программирования программирования

Синтаксические ограничения языка программирования

Программа в абстрактном синтаксисе

Модель онтологии проекций языков программирования на единое представление

Редактор проекций

языков программирования высокого уровня на единое представление

Программа в Описание абстрактном

синтаксисе

проекций

Программа в

едином представлении

Генератор единого представления программ

Передача информации Передача управления

База проекций языков программирования на единое представление

Рис. 1

ционное наполнение, определяет порядок следования лексем и т.д. Связь онтологии языка с конкретным синтаксисом языка названа синтаксическими ограничениями, потому что данный вид информации ограничивает способ выражения в виде текста того смысла, который содержится в абстрактном представлении программы.

Программа в абстрактном синтаксисе - это программа, представленная в терминах онтологии языка программирования, не содержащая элементов конкретного синтаксиса.

Генератор единого представления программ используется для получения единого представления программы, не зависящего от используемых языков программирования, а также являющегося базой для проведения потокового анализа и выполнения преобразований исходной программы.

Входной информацией для него являются программа на языке программирования в абстрактном синтаксисе, хранящаяся в базе программ, и описание проекции данного языка программирования на единое представление, хранящееся в базе проекций языков программирования на единое представление.

В задачи, решаемые данным средством, входят следующие компоненты:

• обход дерева абстрактного синтаксиса программы и выделение понятий языка программирования, в терминах которого представлена программа;

• поиск нужного соответствия: для каждого понятия языка программирования из описания проекции выбирается то соответствие, которое описывает набор (возможно, пустой) элементов языка единого представления, сопоставленный данному понятию;

• интерпретация описания соответствия и, как результат интерпретации, если набор элементов не пуст, синтез описанной в этом соответствии конструкции языка единого представления.

Таким образом, выходной информацией генератора единого представления программ является синтезированная программа в едином представлении; также создаются и заполняются таблицы переменных, констант, функций, типов данных, в ней присутствующих.

Модель онтологии проекций языков программирования на единое представление

В разрабатываемом подходе предлагается формально задавать проекции языков высокого уровня на единое представление программ. Под проекцией будем понимать отображение следующего вида: P: C^E, где C={concepts} - множество понятий языка программирования; E={ele-ments} - множество элементов языка единого представления.

Представим фрагмент модели онтологии проекций языков программирования на единое представление. Данная модель - спецификация аб-

страктного синтаксиса языка описания проекций.

При описании использованы следующие обозначения языка спецификаций, который приведен в работе А.П. Ершова, В.В. Грушецкого «Метод описания алгоритмических языков, ориентированный на реализацию» (1977): объед - объединение; [а] - а не обязательно (может отсутствовать); = - определение понятия; : - раскрытие позиции, * - возможно неопределенный атрибут; сер - серийная компонента.

Язык описания проекций =

Описание: Язык описания проекций задает правила описания проекции заданного языка программирования на единое представление программ.

Описание проекции =

Описание: Описание проекции определяет множество соответствий понятий заданного языка программирования конструкциям языка единого представления программ.

Описание соответствия =

Описание: В соответствии описывается структура конструкции языка единого представления, которая должна быть сопоставлена понятию исходного языка программирования, то есть понятию языка программирования соответствует структурированный определенным образом набор элементов языка единого представления.

Семантика: Для заданного понятия языка программирования интерпретировать описание структуры конструкции языка единого представления, представленное в данном соответствии.

Элементы языка единого представления = ([фрагменты : Набор фрагментов], [дуги управления: Набор дуг управления], [атрибуты : Набор

атрибутов])

Описание: Конструкция языка единого представления состоит из наборов фрагментов, дуг управления и атрибутов, возможно, пустых.

Семантика: Создать конструкцию языка единого представления заданной структуры.

Набор фрагментов =

Фрагмент = объед

Описание: Набор фрагментов представляет собой множество имен классов фрагментов (они представлены компонентой Фрагмент), специфицированных в языке единого представления.

Семантика: Последовательно создать фрагменты, множество имен которых определяет компонента Набор фрагментов.

Набор дуг управления =

Описание: Набор дуг управления представляет собой множество дуг управления. Дуга управления = (

имя дуги : объед (Если, То, Иначе, Выражение _справа, Выражение_слева, ...),

фрагмент-начало дуги : объед (Программ-ный_блок, Условный _оператор, Цикл_с_шагом, Присваивание, ...),

фрагмент-конец дуги : объед

Описание: Дуга управления представляет собой направленную дугу, которая характеризуется своим именем и соединяет два фрагмента. Началом дуги является фрагмент, определяемый селектором "фрагмент-начало дуги", концом дуги -фрагмент, определяемый селектором "фрагмент-конец дуги".

Семантика: Создать дугу управления с именем, определяемым селектором имя дуги, назначить фрагмент, определяемый селектором фрагмент-начало дуги, начальным фрагментом дуги управления, а фрагмент, определяемый селектором фрагмент-конец дуги -конечным фрагментом дуги управления.

Если фрагмент, определяемый селектором фрагмент-конец дуги, на данном шаге интерпретации описания соответствия еще не существует (не создан), то

он будет создан на основе описания следующего интерпретируемого соответствия и назначен конечным фрагментом данной дуги управления.

На рисунке 2 приведен пример описания соответствия между понятием языка программирования Паскаль "Оператор присваивания" и конструкцией языка единого представления. Данное описание выполнено в соответствии с представленной выше моделью онтологии.

В работе изложена концепция подсистемы генерации единого внутреннего представления программ на основе описаний проекций языков программирования высокого уровня на единое представление. Приведен фрагмент модели онтологии

проекций языков программирования высокого уровня на единое представление и на примере продемонстрировано, каким образом на основе модели онтологии представляется фрагмент описания отдельной проекции. На основе предложенной концепции разработан прототип подсистемы генерации единого внутреннего представления программ в рамках системы преобразований программ в специализированном банке знаний о преобразованиях программ. Прототип реализован в среде программирования Java в среде разработки IntelliJ Idea с использованием ресурсов многоцелевого банка знаний (http://www.iacp.dvo.ru/es/ mpkbank).

САМОСБОРКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ КАК ПАТТЕРН ПРОЕКТИРОВАНИЯ

В.И. Гурьянов

Одним из способов преодоления барьера сложности технических систем может стать применение процесса самосборки. В частности, можно ожидать, что технологии, основанные на самосборке, окажутся полезными в решении проблемы адаптивности программных продуктов.

Изучение методологии проектирования систем, использующих процесс самосборки, удобно проводить на имитационной модели развития информационной системы в среде программирования Smalltalk. Для программного обеспечения со слоистой структурой возможно построение полной замкнутой модели инжиниринга.

Процессы адаптации, самосборка и самоорганизация

Одним из наиболее важных качеств программного обеспечения следует считать свойство адаптивности. Программный продукт изготавливается в предположении, что он будет эксплуатироваться в близких, но все же различающихся условиях. Пусть m - бизнес-процесс; s - информационная система. Взаимодействие осуществляется посредством интерфейса I=(f0, fi , ... ,fn), где f -прагматики, то есть идентификаторы элементов интерфейса. Обозначим множество пар S(m^,s^), цеЫ как E(f0) и введем множество спецификаций B(f0), такое, что V Is е B(f0), Is(0)=f0 , где f0 - атрибутная прагматика (общая для всех бизнес-процессов множества Е); Is=(f0,, fi5 ... , fn) - спецификация; Is - j-й элемент кортежа Is. Процесс адаптации имеет три аспекта: прагматический, семантический и синтаксический. Под структурной адаптацией, которая имеет место на прагматическом уровне, будем понимать процесс реструктуризации программного обеспечения w таким обра-

зом, чтобы его интерфейс соответствовал заданному, то есть Ь=1^). В частности, развитие информационной системы можно рассматривать как структурную адаптацию. Адаптацию на семантическом и синтаксическом уровне будем называть параметрической.

Проблему адаптивности можно решить, если производить сборку технической системы непосредственно в среде эксплуатации. Самосборка -достижение определенного (заданного) устойчивого состояния динамической системы. При этом динамическая система может изменять свой элементный состав. Самосборка предполагает механизм сборки системы, интегрированный в саму систему. В частности, одним из таких механизмов может быть самоорганизация (см.: Тай М.Л. Динамика процессов самосборки. - Н. Новгород: Изд-во НГУ, 2000).

Ограничимся программным обеспечением со слоистой структурой. Особенность слоистых структур состоит в направленности связей со слоя 1 на слой 1+1, но не наоборот. Сопоставим каждой букве алфавита VT={ao,a1,...,an} некоторую прагматику Ге1§о и обозначим фактор-множество как Vт/F={fol{al,a2,^,ak},fll{bl,b2,^,bl},^, ..,

2т}}, где aj,bj,.,Zjе VT . Далее сопоставим каждой букве a1еVT упорядоченную пару Ь1=({/1,...,/К1}, {гь...,гМ1}), где I - левые (входные), г - правые (выходные) связи. Пятерка опре-

деляет механизм сборки системы s.

Процесс сборки представляет собой процесс развития системы и в общем случае требует описания в рамках теории развития сложных систем. Рассмотрим частный случай, когда процесс развития может быть описан ориентированными деревьями сборки слов. Пусть Т - класс, 1(Т) - его