Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
19
Добавлен:
23.05.2015
Размер:
1.7 Mб
Скачать

Глава 10

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

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

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

В этой главе мы рассмотрим в качестве примера определение семантики простейшего языка параллельного программирования в терминах теории процессов.

10.1Описание языка параллельного программирования

В этом параграфе мы описываем простейший язык параллельного программирования, который мы будем обозначать символом

L.

311

10.1.1Конструкции языка L

Конструкции языка L делятся на следующие три класса.

1.Выражения.

Понятие выражения языка L совпадает с аналогичным понятием, определённым в параграфе 7.2.3. Выражения строятся из переменных, констант и ФС. Каждому выражению e сопоставлен некоторый тип type(e).

2.Декларации.

Каждая декларация D имеет один из следующих трёх видов:

(a)объявление локальной переменной:

VAR x

(10.1)

где x – имя переменной

(b) объявление ресурса:

RESOURCE R

(10.2)

где R - имя ресурса, который может представлять собой, например, устройство ввода или вывода

(c) описание процедуры:

PROCEDURE G(u, v) IS C

(10.3)

где

G – имя процедуры,

u – переменная, изображающая аргумент процедуры

v – переменная, изображающая результат процедуры

C – оператор (тело процедуры), в который переменные u и v входят как формальные параметры этой процедуры.

312

3.Операторы.

Каждый оператор представляет собой описание некоторого алгоритма.

Ниже

операторы обозначаются символом C

декларации обозначаются символом D

переменные обозначаются символами x, y, z, u, v, . . .

выражения обозначаются символом e

формулы (т.е. выражения типа bool) обозначаются символом b

причём при всех этих символах могут быть индексы. Операторы имеют следующий вид.

(a) присваивание:

x := e

где type(x) = type(e)

(b) условный переход:

if b then C1 else C2

(c) цикл:

while b do C

(d) ввод:

input x

(e) вывод:

output e

(f) пустой оператор:

skip

(g) последовательная композиция:

C1; C2

313

(h) параллельная композиция:

C1 par C2

(i) блок:

begin {D1, . . . , Dk; C} end

Блок “связывает” все вхождения объектов, объявленных в декларациях D1, . . . , Dk: эти объекты являются видимыми только внутри этого блока.

(j) вызов процедуры:

call G(e, z)

где

G – имя вызываемой процедуры,

e – выражение, значение которого является аргументом процедуры G, и

z – переменная, в которую будет занесён результат выполнения процедуры G.

(k)связывание оператора с ресурсом:

with R do C

где R – имя некоторого ресурса.

10.1.2Программы на языке L

Программа на языке L представляет собой оператор

begin {D1, . . . , Dk; C} end

где все переменные, ресурсы, и процедуры, имена которых входят в C, объявлены

в декларациях D1, . . ., Dk,

или в тех декларациях, которые содержатся в C.

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

314