Снос зданий:
ecosnos.ru
Главная  Микроустройства: номенклатура изделий электронной промышленности 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 [ 83 ] 84 85 86 87 88 89 90 91 92 93 94 95

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

program г1 (output);

var X, у, n:integer;

function g (m, n : integer) : integer;

begin if П = 0 then g: = m

else g: = g (n, m mod n)

end; {g}

procedure t(a, b : integer); begin writeln (a, b, g(a, b)) end; {t}

begin t{18, 27);

t(312, 2142)

end.

В данном примере указатель функции размещается в выражении в объявлении функции. Это приводит к рекурсивному вызову функции g, что допустимо в языке Паскаль. Операционная среда.

Компилятор с языка Паскаль сам представляет Паскаль-программу (для версии Pascal 6000-3.4 [27]). Заголовок программы имеет вид: program PASCAL (input, output, Igo); где input, output, Igo - это стандартные файлы INPUT, OUTPUT н LGO, содержащие по умолчанию исходный файл, листинг и объектный код.

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

Последовательность опций, располагающихся в тексте программы и записываемых в виде строк комментария с первым символов $, управляет процессом компиляции: {$ (последовательность опций )(любой комментарий)}. Пример: {$Т +, Р+}.

Опции разделяются запятыми. Плюс (+) означает активизацию опции, а минус (-) - выключение. За опциями могут также располагаться цифры. Всего опций 7:Т - контроль типов, границ массивов, выполнеиня операций и т. д.; Р - генерация кода, необходимого для выполнения дампа в случае аварийного заверщения программы; Хп - загрузка дескрипторов действительных параметров на регистры (О < = п < =6, Х2 - загрузка на первые два регистра, ХЗ - загрузка па первые 3 регистра и т. д.); Е - сохранение имен программных модулей в объектном коде; L - вывод листинга; U - расширение числа литер в строке в исходном тексте программы (если U, то число литер 120); Вп - определяет размер буфера для файла (1 < = л < = 9, размер буфера равен s > > 128 ¥: п).

Язык ЭДИСОН

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



Компилятор, написанный на языке ЭДИСОН, является частью операционной системы, написанной также как и компилятор на языке ЭДИСОН [72].

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

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

Модуль - это группа именованных объектов, которые распадаются на две категории: локальные объекты, которые .могут использоваться только в модуле; и экспортируемые объекты, которые-могут быть использованы как в пределах модуля, так и в непосредственно окружающем блоке. Переменные, локальные в модуле, инициализируются до их использования экспортируемыми процедурами. Модуль може! содержать утверждения, которые выполняются сразу после инициализации объектов, объявленных в модуле.

Программа н выполнение. Программа на языке ЭДИСОН состоит из объявлений констант, типов и единственной полной процедуры.

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

Пример:

const last= .; п1 = char (10)

ргос copier (ргос read (var с: char) ргос write (с: char)) module

var slot : char; full : bool proc send (c : cliar)

begin when not full do slot: = c; full: = true end end proc receive (var с : char)

begin when full do с : = slot; full : = false end end begin full : = false end proc producer var X : char begin read (x);

while x( > last do send (x); read (x) end;



send (x) end

proc consumer var у : char begin receive (y);

while y( ) last do

write (y); receive (y)

end;

- write (y); write (nl) end begin

cobegin 1 do producer also 2 do consumer end

Данная программа определяет два процесса: producer и consumer, выполняемых параллельно. Процессы обмениваются данными через общий буфер, образуемый модулем (moduli). Модуль содержит две экспортируемые процедуры для посылки (send) и приема (receive) символа, доступные из процедур producer и consumer. Значение переменной full в модуле - true, если буфер slot содержит очередной символ для пересылки и, - false, если символ был уже передан.

Тело процедуры copier, представляющее полную процедуру, состоит из параллельного оператора, имеющего структуру;

cobegin

константа процесса 1 do список утверждений also

константа процесса 2 do список утверждений aso

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

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

Структура синхронизирующего утверждения следующая: when булевое выражение 1 do список утверждений else булевое выра.жение 2 do список утверждений

else......................

end......................



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 [ 83 ] 84 85 86 87 88 89 90 91 92 93 94 95