Определение проблемно-ориентированных языков интерпретируемыми автоматами

-

Вычислительные машины и программное обеспечение

Новиков Ф.А., Тихонова У.Н.

Определение проблемно-ориентированных языков

интерпретируемыми автоматами

Создание программного обеспечения - это сложный процесс. Наиболее критичной частью этого процесса является непосредственно программирование приложения, так как программистам приходится работать с двумя предметными областями: предметной областью целевой задачи и используемым языком программирования. Программист осуществляет отображение одной предметной области в другую. поэтому от него требуется знание обоих предметных областей. Программирование в смысле такого отображения может быть упрощено с помощью проблемно-ориентированных языков (domain-specific languages. DSL). Проблемно-ориентированные языки позволяют решать целевую задачу в терминах этой задачи, а не в терминах вычислительной машины [ 1 ] и в идеале могут использоваться непосредственно специалистами в данной области. Такой подход облегчает разработку программ и повышает их качество.

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

и для его поддержки. Одной из технологий, разработанных с целью устранить этот недостаток, является языковый инструментарий Meta Programming System (MPS) [2].

Другим методом определения языков программирования. включающих в себя не только формальное описание конкретного синтаксиса языка, но и формальное определение его абстрактного синтаксиса и семантики, является Венский метод [3]. Для описания абстрактного синтаксиса в нем используется абстрактная грамматика, а для определения семантики языка - интерпретирующие автоматы.

На данный момент автоматы широко применяются как для описания и проектирования алгоритмов, так и для их реализации [4]. Программирование с использованием автоматов, или автоматное программирование, основано на работе виртуальной машины, интерпретирующей автоматы. Согласно этому подходу определение семантики языка с помощью автоматов является одновременно интерпретатором данного языка. Кроме того, автоматное программирование позволяет рассматривать определение конкретного синтаксиса языка в виде диаграммы состояний и переходов как синтаксический анализатор языка [5].

В данной статье описывается метод определения проблемно-ориентированных языков с помощью системы автоматов, интерпретируемых виртуальной машиной автоматного программирования. Структура языка, его абстрактный синтаксис описывается в виде диаграммы классов в нотации UML и определяет представление конкретной программы, которое используют автоматы. Семантика языка задается системой автоматов, которые реализуют интерпретацию программы как экземпляра абстрактного синтаксиса. Конкретный синтаксис задается с помощью системы автоматов.

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

Предлагаемый метод опробован на примере описания спецификации языка СЛОН (слежение и обработка наблюдений) [6] системы ЭРА (Эфемеридные Расчеты Астрономии) [7] - прикладной проблемно-ориентированной системы программирования, предназначенной для решения разнообразных задач астрономии.

Ниже рассмотрены основные идеи предлагаемого метода, примеры его применения для описания языка СЛОН и программная реализация.

Определение абстрактного синтаксиса с помощью диаграммы классов

Для описания абстрактного синтаксиса с помощью диаграмм классов в предлагаемом методе определения проблемно-ориентированных языков используются следующие конструкции иМЬ [Ошибка! Источник ссылки не найден.]:

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

• атрибуты классов - для представления свойств понятий;

• обобщение - для классификации понятий;

• композиция и (реже) ассоциация - для представления отношений между понятиями.

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

1. Множество нетерминалов заменяется множеством классов.

2. Множество терминалов разделяется на "семантически значимые" токены

и "разделители" (скобки, запятые и т.д.). Семантически значимые токены заменяются значениями атрибутов соответствующих классов (например, идентификатор переменной - это атрибут класса Переменная), а разделители в метамодели не указываются.

3. Множество правил заменяется отношениями между классами.

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

5. Отношение выводимости заменяется отношением конкретизации (будем говорить, что объект а и класс А связаны отношением конкретизации, если объект а является экземпляром класса А).

Таким образом, выразительные средства диаграммы классов ЫМЬ не слабее выразительных средств контекстно-свободных формальных грамматик. На рис. 1 приведен фрагмент метамодели языка СЛОН и указаны соответствия между выразительными средствами формальной грамматики и выразительными средствами диаграммы классов.

Определение конкретного синтаксиса с помощью распознающих автоматов

В классической теории трансляции для определения конкретного синтаксиса языка используются формальные грамматики. Одним из способов представления грамматических правил вывода являются диаграммы переходов. Если исключить в них появление нетерминалов на переходах, то можно рассматривать систему таких диаграмм как анализатор программы. Этот подход используется авторами статьи [5] для создания системы автоматического завершения ввода на основе парадигмы автоматного программирования.

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

1. Входным алфавитом системы автоматов является множество терминалов языка.

2. Для описания взаимодействия автоматов используется нотация диаграммы состояний иМЬ: составное состояние - это переход к соответствующему автомату.

При этом под терминалом понимается элемент нотации языка, или с практической точки зрения событие, посылаемое лексическим анализатором текста, или графическим редак-

<ГаЫеЕхрг > ::= number (<TableBinOp> | <NamcdTable > | <Denotation>) *?' '(^Predicate >')' <TableBinOp > ::= <TableExpr > <TTerm> <TableExpr > ^--J

нетерминал

TableExpr

-projection^ -seicct -onEvery Actions -beforeActions -after Actions

7Y

TableBinOp

-TTerm

-альтернативные правила вывода

NamedTable

-name : string

Denotation

Рис. 1. Фрагменты грамматики и метамодели языка СЛОН: табличное выражение

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

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

1. Автомат-распознаватель определяется для каждой сущности (каждого класса) метамодели.

2. Отношение обобщения сводится к ветвлению в автомате.

3. Отношение ассоциации в зависимости от кратности полюсов сводится к циклу или к последовательности составных состояний в автомате.

Внесение необходимых изменений в структуру прототипов автоматов-распознователей и задание элементов нотации (терминалов) языка на переходах определяют конкретный синтаксис языка. На рисунке 2 приведен автомат, распознающий фрагмент языка СЛОН -табличные выражения. Соответствующий фрагмент метамодели языка приведен на рисунке 1.

Определенная таким образом спецификация конкретного синтаксиса языка одновременно реализует задачу распознавания для языка (так как есть виртуальная машина, интерпретирующая автоматы спецификации).

терминалы - лексемы

ТаЫсЕхрг у

(//1

Denotation

[number]

[idij

v

NamedTable

^ select

П

Л

К)

<

TableBinOp

D1

га

Predicate

01

->

составные состояния Рис. 2. Автомат, распознающий табличные выражения языка СЛОН

Определение семантики с помощью интерпретирующих автоматов

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

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

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

2. Результатом выполнения автомата являются некоторые эффекты (выходные воздействия) и точки выхода (exit points).

3. Для взаимодействия между автоматами используются составные состояния и точки выхода.

Согласно парадигме автоматного программирования автомат управляет некоторым объектом управления. Здесь объектом управления является интерпретируемая программа -экземпляр метамодели проблемно-ориентированного

языка. Таким образом, предикаты вычисляются и эффекты выполняются для экземпляра метамодели.

Точка выхода - это состояние, в котором может завершить свое выполнение вложенный в составное состояние автомат. По сути, точка выхода автомата - это возвращаемое им значение.

Именно с помощью такой модели системы взаимодействующих автоматов удалось описать семантику наиболее сложного фрагмента проблемно-ориентированного языка СЛОН -табличных выражений. Язык СЛОН реализует таблично ориентированное программирование [7]. которое рассматривает таблицу, с одной стороны, как массив данных, с другой стороны как программу, определяющую последовательность присваивания значений переменным -величинам предметной области. Как массив данных таблица может храниться в (внешней) памяти. Таблица как программа - это итератор, перебирающий кортежи таблицы, чтобы выполнять с ними некоторые действия. Табличные выражения реализуют механизм алгебры таблиц, позволяющий строить из имеющихся таблиц произвольные таблицы.

Например, операция умножения таблиц (в метамодели языка она представлена классом бинарных табличных операций ТаЫеВтОр, см. рис. 1) позволяет последовательно объединить

Mult STM

7

экземпляр автомата

тип автомата

Н

• Left; Table Expression STM

Entry/ goToLeft^ Exit/ goToParent

s--^ynextTuple

Г Right: Table Expression STM

Entry/ goToRight Exit/ goToParent

nextTupli

ффекты

/ null right)

очки выхода

-Xg)

eot

nextTuple

Рис. 3. Семантика операции умножения таблиц

все кортежи двух таблицы. Если рассматривать таблицу как программу (или как цикл), то умножению таблиц соответствует вложенность циклов (рис. 3).

Кроме того, для описания семантики табличных операций языка СЛОН используется следующая модель выполнения (интерпретации) системы автоматов:

• структура автомата (его состояния и переходы между ними) определяет класс автоматов;

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

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

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

определение семантики с сохранением локальных данных каждого автомата (смыслового элемента этого определения).

Программная реализация метода с помощью машины автоматного программирования

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

Машина автоматного программирования реализована с помощью применения метода раскрутки (bootstrapping) к предлагаемому методу: автоматное программирование - это проблемно-ориентированный язык. Абстракт-

[carSuie *Mifl/cwSuif -«ил

Т.....

{Интерпретация текущего экземпляра автомата }

£

[cm-Suit.type -compotttc]

[curSlile type a hulor. AAbutory '= cull) / curSuue » hktor

Current Sl»u

4>

do Effort! cvrSuir en tr>)

cut Auto - CrcjlcAut«cutSuic mxAuloTyj*3

Lctvmg сипаи (Utc

/еагТаш » сшЗш» oalffnt [ebt 1 / cw Ггжш - curS<ttc ouUint

|tbe 11 carSute

|*1m ) / curTnuu - OirSUU.OUlDCXt

JL

|5оЕСГ«с<

i

и 11 exit Point» null |сшТг»т itwimithoalype = cuiPotnfl/ owner exiiyoini - cur Ггам^иШаноапа

I_I

{•untype - hototy1, / «urtheJorj -corSuil

- null 1 uu i

Рис. 4. Алгоритм интерпретации (семантика) автоматной программы

ный синтаксис этого языка определен в виде ме-тамодели автоматной программы. Семантика выполнения автоматной программы описана в виде автоматной программы (рис. 4). Конкретный синтаксис автоматной программы задан с помощью автоматной программы, распознающей конкретное представление автоматной программы.

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

Заключение

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

СПИСОК ЛИТЕРАТУРЫ

1. Martin Fowler "Language Workbenches: The Killer-App for Domain Specific Languages?" www. martinfowler.com/articles 12 June 2005

2. Sergey Dmitriev "Language Oriented Programming: The Next Programming Paradigm" www.on-board.jetbrains.com February 2005

3. Олловгрен А. "Определение языков программирования интерпретирующими автоматами". Москва Мир 1977

4. Шалы го А. А. Сайт по автоматному программированию и мотивации к творчеству http://is.ifmo. ги/ СПбГУИТМО Кафедра "Технологии программирования"

5. Гуров В. С., Мазии М. А., Шалыго А. А.

"Автоматическое завершение ввода условий в диаграммах состояний", http://is.ifmo.ru/works/_2008-02-28_auto_stop.pdf 2008

6. Krasinsky G. A., Novikov F. A., Skripnichen-ko V. I. "Problem Oriented Language lor Ephemcris Astronomy and its Realization in System ERA" Cel. Mech.. 1989. Vol. 45. P. 219-229

7. Новиков Ф. А. "Архитектура системы ЭРА -табличный подход к обработке данных" Ленинград ИПАРАН. 1990

8. Буч Г.. Якобсон А., Рамбо Дж. UML. 2-е издание. СПб.. Питер. 2006

Дунаев А. В., Ларченко A.B., Бухановский A.B.

Инструментальная оболочка поддержки принятия решений

разработчика высокопроизводительных приложений

в Грид-среде

Введение

На современном этапе развития технологий распределенных вычислений и систем понятие Грид подразумевает географически распределенную, согласованную, открытую и стандартизованную среду разделения вычислительных и информационных ресурсов [1]. Оно обобщает частные определения, независимо сформулированные I. Foster и С. Kesselman [2] и М. Livny [3], которые по мере внедрения технологий Грид в научно-исследовательскую и производственную практику расширяются и модифицируются. В настоящее время наибо-

лее привычной является инфраструктурная интерпретация Грид как среды, предоставляющей совокупность высокопроизводительных вычислительных ресурсов для выполнения независимых задач многих пользователей [4]. Однако в рамках концепции [1] допустим альтернативный подход, который рассматривает Грид как специфическую ("мягкую", soft) среду параллельных вычислений наряду с более традиционными (например, кластерными, гибридными, Р2Р) параллельными архитектурами.

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