Программируем по-русски
|
Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку. Издатель Глагола
|
Описание языка программирования ГлаголИюнь 2006 г.
Что на уме, то и на языке. Оглавление3. Объявления и области действия понятий 7.2.3.Действия над множествами 8.9.Указания ВОЗВРАТ из задачи и ВЫХОД из кольца 13. Перевод в машинное представление Расширение видов (опорный вид) Совместимость при вызове задачи ВведениеКоротко да ясно, оттого прекрасно. Этот справочник содержит полное описание языка Глагол – языка программирования общего назначения, родственного языкам Паскаль и Оберон. Перечислим некоторые характерные черты этого языка. Все данные имеют определённый вид. Существуют как простые виды – знаковый (ЗНАК), числовые (ШИРВЕЩ, ВЕЩ, ШИРЦЕЛ, ЦЕЛ, УЗКЦЕЛ), логический (КЛЮЧ), множество (МНОЖ), так и составные виды – (РЯД и НАБОР). Вид НАБОР можно расширять новыми свойствами. Данные могут быть постоянными и переменными. Простейшие преобразования данных выполняются так называемыми действиями, которые, в основном, имеют соответствующие машинные команды. Действия можно объединять в выражения. В выражениях всегда должно соблюдаться соответствие видов. Более сложный порядок для преобразования данных задаётся указаниями. Последовательности указаний и данные можно объединять в задачи и отделы. Обычно приложение строится из нескольких отделов. Каждый отдел существует в двух представлениях: текстовом (с которым работает человек) и машинном (которое получается из соответствующего текстового представления с помощью преобразователя языка). Таким понятиям языка, как вид, постоянная, переменная, задача и отдел ставятся в соответствие некоторые названия. Область действия этих названий ограничивается с помощью участков, которые могут быть вложенными. В роли таких участков выступают отделы, задачи и наборы. 1. Условные обозначенияГоре в чужой земле безъязыкому. В тексте определений главные слова подчёркнуты (например, вид данных). Глава 13 содержит определения понятий, которые используются при описании правил соответствия видов. В тексте эти понятия выделены курсивом (например, одинаковый вид). Язык описывается с помощью РБНФ. Разновидности выражений отделяются знаком |. Квадратные скобки [] обозначают необязательность записанного в них выражения, а фигурные скобки {} обозначают его повторение (возможно 0 раз). Понятия языка начинаются с заглавной буквы (например, Указание), а слова языка или начинаются со строчной буквы (например, название), или записываются целиком заглавными буквами (например, ЗАДАЧА), или заключаются в кавычки (например, ":="). 2. Слова языкаЖивое слово дороже мёртвой буквы. Каждый язык строится из простейших выражений – слов. Слова неделимы и сами по себе обозначают некоторое содержание. В описываемом языке присутствует семь разновидностей слов: названия, числа, одиночные знаки, цепочки знаков, действия, указания и разделители. Для записи слов используются буквы, цифры и другие печатные знаки. Заглавные и строчные буквы считаются различными. Пробелы и концы строк, которые не разделяют смежные слова, не учитываются. Между любыми двумя словами могут располагаться пояснения и указания для текстореза (см. 13.1). Они не влияют на машинное представление приложения. Пояснение – это произвольная последовательность знаков, начинающаяся с (* и оканчивающаяся *). Пояснения могут быть вложенными. Указания для текстореза начинаются с <* и оканчиваются *>. Названия – это последовательности букв и цифр, которые начинаются с буквы.
Примеры: Слово1 ПолПи i зн ЯйцоЗолотое Числа используются для представления целых и вещественных чисел без знака. Целое число имеет вид данных, который является наименьшим целым видом, способным хранить его значение (см. 5.1). Если запись целого числа оканчивается буквой H, то оно представлено в шестнадцатеричном виде, иначе оно представлено в десятичном виде. Вещественное число всегда содержит десятичную точку. Оно может также содержать десятичный порядок. Буква E (или D) означает "умножить на десять в степени". Если у вещественного числа порядок содержит букву D, то у него ШИРВЕЩвид, иначе у него ВЕЩвид.
Примеры:
Одиночные знаки обозначаются порядковым номером знака в шестнадцатеричном виде с приписанной в конце буквой X.
Цепочки знаков – это последовательности печатных знаков, заключённые в одиночные (') или двойные (") кавычки. Открывающая кавычка должна быть такой же, как и закрывающая, и не должна встречаться внутри цепочки знаков. Три знака #nn, где nn – двузначное шестнадцатеричное число, обозначают один знак с кодом nn. Количество знаков в цепочке называется её длиной. Цепочка из одного знака может использоваться везде, где допустим одиночный знак, и наоборот.
Примеры: 'Сама (мышь) залезла в кувшин, а кричит: "Пусти!"' "Зацепился за пень,#0D#0A да и стоит день." "1" "Если А #23 Б, то" Действия, указания и разделители – это знаки, пары знаков и служебные слова, перечисленные ниже. Служебные слова не могут использоваться как названия.
3. Объявления и области действия понятийС именем Иван, без имени болван. Понятия языка – это выражения языка, которые строятся по особым правилам из слов и из других понятий языка. Все понятия должны быть объявлены до их первого использования. Объявление задаёт название и другие постоянные свойства понятия. В дальнейшем название используется для обозначения этого понятия. Область действия названия понятия распространяется от точки объявления этого понятия до конца участка (отдела, задачи или набора), на котором находится это объявление. Область действия названия распространяется и на вложенные участки (задачи), кроме тех мест, где она перекрывается областью действия понятия с таким же названием. Правила для области действия названия: а) название не может обозначать больше, чем одно понятие внутри данной области действия; б) разрешено объявлять вид Дп, как ДОСТУП К Вп (см. 5.4) в точке, где вид Вп ещё не объявлен; объявление вида Вп должно следовать на том же уровне участка, на котором происходит и объявление Дп; в) названия свойств, упоминаемые в объявлении набора (см. 5.3), используются только для обозначения свойств переменных вида НАБОР. Понятие, объявленное на уровне отдела (см. 10), можно использовать и в других отделах, если при своём объявлении название этого понятия сопровождается меткой общедоступности (знак "-" или "+"). Такое понятие обозначается полным названием, состоящим из названия отдела, точки и названия понятия. Например, если в отделе-пользователе Пл необходимо обратиться к понятию с названием н, объявленному в отделе-владельце Вл, то полное название н в тексте Пл будет записываться как Вл.н. Допустимо обращение к понятиям своего отдела по полному названию. В отделах-пользователях возможно изменение значений только тех переменных, которые были объявлены в отделе-владельце с меткой общедоступности "+".
Следующие названия являются встроенными в язык, т.е. соответствующие понятия считаются уже объявленными на уровне каждого отдела. Применение этих названий см. в 5.1 и 9.2.
4. Объявление постояннойОбъявление постоянной связывает название со значением.
Постоянное выражение – это выражение, которое может быть вычислено преобразователем по его тексту без выполнения приложения. Его данные (см. 7.1) – другие постоянные, различные действия и встроенные задачи (см. 9.2), которые могут быть выполнены преобразователем. Примеры объявления постоянной: Слагаемых=100; Пи-=3.141592654; ПолПи-=Пи/2; Замечание1="Деление на ноль."; ПолноеМножество={МИН(МНОЖ)..МАКС(МНОЖ)} 5. Объявление видаВид данных определяет значения, которые могут принимать переменные этого вида, и действия, которые можно применять к этим переменным. При объявлении вида происходит связывание названия с видом данных. При объявлении составного вида (вид РЯД или вид НАБОР) также задаётся и внутреннее строение переменных этого вида. Составной вид не может строиться из самого себя.
Примеры: Таблица=РЯД Слагаемых ИЗ ВЕЩ; Функция=ЗАДАЧА(x:ЦЕЛ):ЦЕЛ; Яйцо-=ДОСТУП К ОписаниеЯйца; ОписаниеЯйца-=НАБОР твёрдость-:ЦЕЛ; положение+:Место КОН; ЗолотоеЯйцо=ДОСТУП К ОписаниеЗолотогоЯйца; ОписаниеЗолотогоЯйца=НАБОР(ОписаниеЯйца) богатство:ВЕЩ КОН 5.1. Простые видыАз да буки, да и конец науки. Простые виды обозначены встроенными названиями. Соответствующие действия определены в 7.2, а встроенные задачи в 9.2. Предусмотрены следующие простые виды:
УЗКЦЕЛ, ЦЕЛ и ШИРЦЕЛ – целые виды, ВЕЩ и ШИРВЕЩ – вещественные виды, а вместе они образуют числовые виды. Считается, что ШИРВЕЩ >= ВЕЩ >= ШИРЦЕЛ >= ЦЕЛ >= УЗКЦЕЛ, причём больший вид поглощает меньший вид. 5.2. Вид РЯДОдна головня и в печи не горит, а две и в поле курятся. Переменные вида РЯД состоят из совокупности переменных одного вида, называемого опорным видом ряда. Число переменных, составляющих ряд, называют его размером. Целое число от 0 до размера ряда минус 1 выделяет соответствующую переменную из ряда.
Объявление ряда РЯД Размер0,Размер1,…,Размерn ИЗ Вп понимается как сокращение РЯД Размер0 ИЗ РЯД Размер1 ИЗ … РЯД Размерn ИЗ Вп Объявление РЯД Размер ИЗ ЗНАК можно записывать как ЦЕПЬ[Размер]. Вид РЯД, объявленный без указания размера, называется открытым рядом. Такой вид используется только: а) в приёмнике задачи (см. 9.1); б) как опорный вид для вида ДОСТУП (см. 5.4); в) как опорный вид другого открытого ряда. Примеры: РЯД 10,N ИЗ ЦЕЛ; РЯД ИЗ ЗНАК; ЦЕПЬ 5.3. Вид НАБОРИз многих малых выходит одно большое. Переменные вида НАБОР могут состоять из совокупности переменных различного вида. Переменные, составляющие этот набор, называются свойствами набора. Объявление вида НАБОР определяет название и вид каждого свойства. Область действия названий свойств простирается от точки их объявления до конца объявления вида НАБОР, а также захватывает обозначения свойств переменных вида НАБОР (см. 7.1). Если вид НАБОР объявлен с меткой общедоступности (см. 3), то свойства, которые должны быть доступны в отделах-пользователях, также объявляются с метками общедоступности. Такие свойства называются общедоступными свойствами, а неотмеченные свойства называются скрытыми свойствами.
Примеры объявлений вида НАБОР: НАБОР день,месяц,год:ЦЕЛ КОН; НАБОР имя-,фамилия-,отчество-:ЦЕПЬ[32]; возраст+:ЦЕЛ КОН Вид НАБОР может быть объявлен как расширение другого вида НАБОР. В примере О=НАБОР ц:ЦЕЛ КОН; Р=НАБОР (О) в:ВЕЩ КОН Р – непосредственное расширение вида О, а О – непосредственный опорный вид Р (см. 13). Переменные расширенного вида Р состоят из свойств, объявленных в опорном виде, и свойств, которые объявлены в Р. Все названия, объявленные в расширенном наборе, должны быть отличны от названий, объявленных в его опорном виде (видах). 5.4. Вид ДОСТУПОтойдём да поглядим, хорошо ли мы сидим. Переменные вида ДОСТУП принимают значения, которые обеспечивают доступ к переменным некоторого вида Вп. Вид Вп называется опорным видом доступа и может быть только видом РЯД или видом НАБОР. Вид ДОСТУП заимствует отношение расширений своего опорного вида: если вид Р является расширением вида О и вид ДР=ДОСТУП К Р, а вид ДО=ДОСТУП К О, то вид ДР также является расширением вида ДО.
Если д – переменная вида ДОСТУП К Вп, то вызов встроенной задачи СОЗДАТЬ(д) (см. 9.2) размещает новую переменную вида Вп в свободной памяти (если вид Вп – n-мерный открытый ряд, то размещение должно быть выполнено вызовом СОЗДАТЬ(д,Размер0,…,Размерn-1), где Размер0, …, Размерn-1 – это выражения, которые задают размеры соответствующим измерениям ряда). После этого переменная д хранит значение, которое обеспечивает доступ к этой новой размещённой переменной вида Вп. Любая переменная вида ДОСТУП может также принимать и значение ПУСТО, при котором доступ к другим переменным отсутствует. 5.5. Вид ЗАДАЧАПеременные вида ЗАДАЧА принимают значения, которые обеспечивают доступ к вызову задач. Также эти переменные могут принимать значение ПУСТО. Если задача з присваивается переменной вида Вп, то заголовки (см. 9.1) у з и у Вп должны совпадать (см. 13). При этом задача з не может быть ни встроенной задачей, ни вложенной в другую задачу.
Пример: Функция=ЗАДАЧА(x:ВЕЩ):ВЕЩ; 6. Объявление переменныхОбъявление переменных определяет названия и вид их данных.
Переменные вида НАБОР и вида ДОСТУП имеют как объявленный вид (вид, с которым они были объявлены – называемый просто их видом), так и размещённый вид (вид их значения во время выполнения). Объявленный вид определяет, какие свойства набора доступны. Для переменных вида ДОСТУП и приёмников ссылок вида НАБОР размещённый вид может быть расширением их объявленного вида. Примеры объявлений переменных (см. примеры из 5): н,i,j:ЦЕЛ; год,возраст:ЦЕЛ; x,y:ВЕЩ; к1,к2:КЛЮЧ; м:МНОЖ; f:Функция; р:РЯД 100 ИЗ ВЕЩ; город:РЯД 16 ИЗ НАБОР название:ЦЕПЬ[32]; жителей:ЦЕЛ КОН; яйцо:Яйцо 7. ВыраженияСтруны готовы, недалеко и до песен. Выражения задают правила вычисления по значениям постоянных и текущим значениям переменных других значений путём применения действий и вызова задач, возвращающих ответ. Выражения состоят из данных и действий. Круглые скобки могут использоваться для объединения действий и данных. 7.1. ДанныеЗа исключением чисел, одиночных знаков, цепочек знаков и построителей множеств, данные представлены обозначениями. Обозначение содержит название постоянной, переменной или задачи, возвращающей ответ. Это название может быть дополнено названием отдела (см. 3 и 10) и может сопровождаться разделителями, если обозначенное понятие является частью составного понятия.
Если р обозначает переменную вида РЯД, то р[в] обозначает переменную из р, чей номер – текущее значение выражения в. Выражение в должно быть целого вида. Обозначение р[в0,в1,…,вn] применимо вместо обозначения р[в0][в1]…[вn]. Если н обозначает переменную вида НАБОР, то н.с обозначает свойство с набора н. Если р или н доступны только для чтения, то р[в] и н.с также доступны только для чтения. Если д обозначает переменную вида ДОСТУП, то д^ обозначает переменную, к которой в д хранится доступ. Обозначения д^.с и д^[в] могут быть сокращены до д.с и д[в]. Охрана вида обозначается как п(Вп) и требует, чтобы размещённым видом переменной п был вид Вп или расширение вида Вп. В противном случае выполнение приложения прерывается. В пределах такого обозначения переменная п воспринимается как имеющая объявленный вид Вп. Охрана вида применима, если а) п – приёмник ссылок вида НАБОР, или п – переменная вида ДОСТУП, и если б) Вп – расширение объявленного вида п. Если обозначенное понятие – постоянная или переменная, то обозначение ссылается на их текущее значение. Если же понятие является задачей и обозначение сопровождается (возможно, пустым) списком источников, то в этом случае подразумевается вызов задачи и подстановка значения ответа, полученного при её исполнении. Источники должны соответствовать приёмникам, как и при вызовах собственно задач (см. 9.1). Примеры обозначений (см. примеры 6):
7.2. ДействияЯзык придерживается принятых в математике соглашений о порядке выполнения действий в выражениях. Существует четыре разряда действий с различными преимуществами порядка выполнения. У отрицания НЕ самое высокое преимущество, далее следуют действия типа умножения, действия типа сложения и отношения. Действия с одинаковым преимуществом выполняются слева направо. Например, x-y-z означает (x-y)-z.
Предусмотренные действия перечислены в следующих таблицах. Некоторые действия применяются к данным различных видов, обозначая при этом разные действия. В этих случаях выполняемое действие определяется видом данных. Данные должны быть совместимыми выражениями для данного действия (см. 11). 7.2.1. Логические действия
Эти действия применимы к данным вида КЛЮЧ и дают ответ вида КЛЮЧ. 7.2.2. Арифметические действия
Действия "+", "-", "*" и "/" применимы к данным числовых видов. Вид ответа "+", "-" и "*" есть вид того данного, который поглощает вид другого данного. У "/" ответ – наименьший вещественный вид, который поглощает виды обоих данных. Одноместный "-" обозначает перемену знака, а одноместный "+" – тождественное действие. Действия ДЕЛИТЬ и ОСТАТОК применимы только к данным целого вида. Они связаны следующими формулами, определёнными для любого x и положительного делителя y: x = (x ДЕЛИТЬ y) * y + (x ОСТАТОК y) 0 <= (x ОСТАТОК y) < y Примеры:
7.2.3. Действия над множествами
Действия над множествами применимы к данным вида МНОЖ и дают ответ вида МНОЖ. Одноместный "-" обозначает дополнение x, то есть -x – это множество целых чисел от 0 до МАКС(МНОЖ), которые не являются элементами x. На действия с множествами не распространяется сочетательный закон, т.е. (a+b)-c # a+(b-c). Построитель множества задаёт значение множества списком элементов, заключённым в фигурные скобки. Элементы должны быть целого вида и иметь значения от 0 до МАКС(МНОЖ). Диапазон a..b обозначает все целые числа на отрезке [a,b]. 7.2.4. Отношения
Все отношения дают ответ вида КЛЮЧ. Отношения "=", "#", "<", "<=", ">" и ">=" применимы к числовым видам, виду ЗНАК, цепочкам знаков и рядам из знаков, содержащим в конце 0X. Отношения "=" и "#", кроме того, применимы и к видам КЛЮЧ, МНОЖ, ДОСТУП, ЗАДАЧА и к значению ПУСТО. Отношение в В м выясняет, не входит ли значение выражения в во множество значений выражения м, где в должно быть целого вида, а м – вида МНОЖ. Отношение п ЯВЛЯЕТСЯ Вп называется проверкой вида и выясняет, является ли размещённый вид переменной п видом Вп или расширением Вп. Проверка вида применима, если а) п – приёмник ссылок вида НАБОР, или п – переменная вида ДОСТУП, и если б)Вп – расширение объявленного вида п. Примеры выражений (см. примеры 6):
8. УказанияУказания определяют ход выполнения приложения. В языке существуют простые и составные указания. Простые указания – это присваивание, вызов задачи, возврат из задачи и выход из кольца. Составные указания, в отличие от простых указаний, построены из частей, которые являются самостоятельными указаниями. Они используются, чтобы выразить последовательное и условное, выборочное и повторное выполнение. Указание также может быть пустым, в этом случае оно ничего не обозначает. Пустое указание введено для упрощения записи последовательности указаний.
Последовательность указаний, разделённых точкой с запятой, означает поочерёдное выполнение составляющих её указаний.
8.1. ПрисваиваниеПрисваивание заменяет текущее значение переменной новым значением, определяемым результатом выражения. Выражение должно быть совместимо по присваиванию с переменной (см. 14). Символом присваивания является ":=".
Если выражение в вида Вв присваивается переменной п вида Вп (п:=в), то имеет место следующее: а) если Вп и Вв – вида НАБОР, то в присваивании участвуют только те свойства набора Вв, которые также имеются в наборе Вп; размещённый вид п и объявленный вид п должны быть одинаковыми, после присваивания они не изменяются; б) если Вп и Вв – вида ДОСТУП, то размещённым видом п становится размещённый вид в; в) если Вп – РЯД N ИЗ ЗНАК, а в – цепочка длины M<N, то п[i] присваиваются значения в[i] для i=0..M-1, а п[M] получает значение 0X. Примеры присваивания (см. примеры 6): н:=0; к1:=н=i; x:=н+1; j:=log2(н+i); (* см. 9.1 *) f:=log2; м:={2,3,5,7,11}; р[н]:=(x+y)*(x-y); город[н+1].название:="Тверь"; город[i]:=город[j] 8.2. Вызов задачиВызов задачи определяет выполнение последовательности указаний, объявленных в этой задаче. В нём может содержаться список источников данных. Каждому источнику всегда соответствует приёмник, определённый в объявлении задачи (см. 9). Соответствие устанавливается в порядке следования в списках источников и приёмников. Если источник обозначает часть составной переменной, то эта часть выделяется перед выполнением задачи. Если приёмник является приёмником ссылок, то соответствующий источник может быть только обозначением переменной. (Примечание: если приёмник ссылок объявлен с меткой общедоступности "-" (см. 9.1), то источник также может быть и цепочкой знаков.) Если приёмник является приёмником значений, то соответствующий источник может быть выражением. Это выражение вычисляется перед выполнением задачи, а полученное значение присваивается приёмнику (см. также 9.1).
Примеры: ПисЦел(н*2+1); (* см. 9.1 *) УВЕЛИЧИТЬ(город[j].жителей) (* см. 9.2 *) 8.3. Указание ЕСЛИ ТО
Указание ЕСЛИ ТО задаёт условное выполнение входящих в него последовательностей указаний. Логические выражения, предшествующие последовательности указаний, будем называть условиями. Условия проверяются последовательно одно за другим, пока очередное не окажется равным ВКЛ, после чего выполняется связанная с этим условием последовательность указаний. Если ни одно условие не удовлетворено и имеется служебное слово ИНАЧЕ, то выполняется последовательность указаний, записанная после этого слова. Пример: ЕСЛИ (зн>="A") И (зн<="Z") ТО Название() АЕСЛИ (зн>="0") И (зн<="9") ТО Число() АЕСЛИ (зн="'") ИЛИ (зн='"') ТО Цепочка() ИНАЧЕ Ошибка() КОН 8.4. Указание ВЫБРАТЬ ИЗУказание ВЫБРАТЬ ИЗ определяет выбор и выполнение последовательности указаний по значению выражения. Прежде всего вычисляется значение выбирающего выражения, а затем выполняется та последовательность указаний, чей список меток варианта содержит полученное значение. Выбирающее выражение должно быть такого целого вида, который поглощает виды всех меток вариантов, или же и выбирающее выражение, и метки вариантов должны иметь вид ЗНАК. Метки варианта состоят из постоянных выражений, и ни одно из их значений не должно употребляться больше одного раза. Если значение выражения не совпадает с меткой ни одного из вариантов, выбирается последовательность указаний после слова ИНАЧЕ, если оно есть, иначе выполнение приложения прерывается.
Пример: ВЫБРАТЬ год-годРождения ИЗ 0..7*1-1: возраст:=дитя | 7*1..7*2-1: возраст:=отрок | 7*2..7*3-1: возраст:=юноша | 7*3..7*8-1: возраст:=муж | 60,70,80: возраст:=юбиляр ИНАЧЕ возраст:=старец КОН 8.5. Указание ПОКАУказание ПОКА задаёт повторное выполнение последовательности указаний, пока условие, заданное логическим выражением, остаётся равным ВКЛ. Условие проверяется перед каждым выполнением последовательности указаний.
8.6. Указание ПОВТОРЯТЬ ДОУказание ПОВТОРЯТЬ ДО определяет повторное выполнение последовательности указаний, пока условие, заданное логическим выражением, не удовлетворено. Последовательность указаний выполняется, по крайней мере, один раз.
8.7. Указание КОЛЬЦОУказание КОЛЬЦО определяет повторное выполнение последовательности указаний. Оно завершается после выполнения указания ВЫХОД внутри этой последовательности (см. 8.9).
Указания КОЛЬЦО нужны для того, чтобы выразить повторения с несколькими точками выхода, или в случаях, когда условие выхода находится в середине повторяемой последовательности указаний. 8.8. Указание ОТ ДОУказание ОТ ДО определяет повторное выполнение последовательности указаний для увеличивающихся (уменьшающихся) значений переменной целого вида, называемой управляющей переменной.
Указание ОТ ц:=НачальноеВыражение ДО КонечноеВыражение ПО шаг ВЫП Указания КОН равнозначно конец:= КонечноеВыражение; начало:=НачальноеВыражение; ЕСЛИ шаг>0 ТО ПОКА ц<=конец ВЫП Указания; УВЕЛИЧИТЬ(ц,шаг) КОН АЕСЛИ шаг<0 ТО ПОКА ц>=конец ВЫП Указания; УВЕЛИЧИТЬ(ц,шаг) КОН ИНАЧЕ КОЛЬЦО КОН КОН конец и ц одинакового вида. Шаг должен быть отличным от нуля постоянным выражением. Если шаг не указан, то он предполагается равным 1. Пример: ОТ i:=0 ДО 99 ВЫП x:=x+р[i] КОН 8.9. Указания ВОЗВРАТ из задачи и ВЫХОД из кольцаУказание ВОЗВРАТ определяет точку завершения выполнения задачи. Оно обозначается служебным словом ВОЗВРАТ. Задачи, возвращающие ответ, завершаются указанием ВОЗВРАТ, задающим значение ответа. Ответ обозначается выражением, которое следует за словом ВОЗВРАТ. Вид выражения должен быть совместим по присваиванию (см. 14) с видом ответа, определённым в заголовке задачи (см. 9). В собственно задачах указание ВОЗВРАТ подразумевается в конце тела задачи. Любое явное указание ВОЗВРАТ служит дополнительной точкой завершения выполнения задачи. Указание ВЫХОД определяет точку завершения охватывающего указания КОЛЬЦО. Оно обозначается служебным словом ВЫХОД. Пример с указаниями ПОКА, ПОВТОРЯТЬ, КОЛЬЦО, ВЫХОД: живёт(дед); живёт(баба); КОЛЬЦО снесла(курочка,яйцо); ЕСЛИ НЕ (яйцо ЯВЛЯЕТСЯ ЯйцоЗолотое) ТО ВЫХОД КОН; ПОКА НЕ устаёт(дед) ВЫП бьёт(дед,яйцо) КОН; ПОКА НЕ устаёт(баба)ВЫП бьёт(баба,яйцо) КОН; ПОВТОРЯТЬ бегает(мышь) ДО задела(мышь,яйцо) И разбито(яйцо); плачет(дед); плачет(баба); кудахчет(курочка) КОН 8.10. Указание ДЛЯУказание ДЛЯ определяет выполнение последовательности указаний при помощи проверки вида у заданной переменной и применяет охрану вида к каждому вхождению этой переменной внутри выполняемой последовательности указаний.
Если п – приёмник ссылок вида НАБОР или переменная вида ДОСТУП, и её объявленный вид Вп0, то указание ДЛЯ п ВИДА Вп1: ПослУк1 | Вп2: ПослУк2 ИНАЧЕ ПослУк3 КОН имеет следующий смысл: если размещённый вид переменной п есть Вп1, то выполняется последовательность указаний ПослУк1, в которой п воспринимается как имеющая объявленный вид Вп1, иначе если размещённый вид п есть Вп2, то выполняется ПослУк2, в которой п воспринимается как имеющая объявленный вид Вп2, иначе выполняется ПослУк3. Вп1 и Вп2 должны быть расширениями вида Вп0. Если ни одна проверка вида не удовлетворена, а ИНАЧЕ отсутствует, то выполнение приложения прерывается. Пример: ДЛЯ яйцо ВИДА ЯйцоЗолотое: УМЕНЬШИТЬ(яйцо.богатство) КОН 9. Объявление задачиВ объявлении задачи определяется её заголовок и тело. Заголовок задачи определяет её название, приёмники и вид ответа для тех задач, которые возвращают ответ. Тело начинается объявлением внутренних понятий, которые используются только в данной задаче, и заканчивается последовательностью указаний. В конце объявления задачи повторяется её название. Имеются два рода задач: собственно задачи и задачи, возвращающие ответ. Последние вызываются обозначением задачи как части выражения и возвращают ответ, который является данным для выражений. Собственно задачи получают управление после вызова задачи. Задача является задачей, возвращающей ответ, если определён вид её ответа. Тело задачи, возвращающей ответ, должно содержать указание ВОЗВРАТ, которое и определяет ответ. Вид ответа задачи не может быть ни видом НАБОР, ни видом РЯД. Понятия, объявленные вне задачи, также видимы и в тех местах задачи, в которых они не перекрыты объявлением внутреннего понятия с тем же самым названием.
Заготовка задачи служит для того, чтобы разрешить вызовы задачи до её объявления. Написание заготовки задачи отличается от написания заголовка задачи только разделителем "^" после слова ЗАДАЧА. Пример заготовки задачи: ЗАДАЧА ^ПисЦепь-(р:ЦЕПЬ); 9.1. ПриёмникиПриёмники – это переменные, которые будут соответствовать источникам после вызова данной задачи. Имеются два рода приёмников: приёмники значений и приёмники ссылок, отличающиеся при объявлении соответственно отсутствием или наличием метки общедоступности (см. 3). Приёмники значений – это внутренние переменные задачи, которым в качестве начального присваивается значение соответствующего источника. Приёмники значений не могут быть составного вида. Приёмники ссылок с меткой "+" – это ссылки на переменные источники, а с меткой "-" – это ссылки на постоянные источники. Область действия приёмника простирается от его объявления до конца задачи, в которой он объявлен. В этой области невозможно изменять значения у тех приёмников, которые объявлены с меткой "-". Задача без приёмников, которая возвращает ответ, должна иметь пустой список приёмников. Она должна вызываться обозначением задачи, чей список источников должен быть тоже пустым.
Пусть Впр – вид приёмника пр (кроме открытого ряда) и Вис – вид соответствующего источника ис. Для приёмников ссылок Вис и Впр должны быть одинаковыми видами, или Впр должен быть видом НАБОР, а Вис – расширением Впр. Всегда ис должен быть совместим при вызове задачи с пр (см. 13). Если Вис – открытый ряд, то размер пр становится равным размеру ис. Примеры объявлений задач: ЗАДАЧА ПисЦел-(ц:ЦЕЛ); (* 0<=ц<100000 *) ПЕР н:ЦЕЛ; цифры:РЯД 6 ИЗ ЗНАК; УКАЗ н:=0; ПОВТОРЯТЬ цифры[н]:=ВЗНАК(ц ОСТАТОК 10+ВЦЕЛ("0")); ц:=ц ДЕЛИТЬ 10; УВЕЛИЧИТЬ(н) ДО ц=0; цифры[н]:=0X; ПисЦепь(цифры) КОН ПисЦел;
ЗАДАЧА ПисЦепь-(р:ЦЕПЬ); ПЕР н:ЦЕЛ; УКАЗ н:=0; ПОКА (н < РАЗМЕР(р)) И (р[н] # 0X) ВЫП ПисЗнак(р[н]); УВЕЛИЧИТЬ(н) КОН КОН ПисЦепь;
ЗАДАЧА ЧитЦел-(ц+:ЦЕЛ); ПЕР зн:ЗНАК; УКАЗ ц:=0; ЧитЗнак(зн); ПОКА ("0" <= зн) И (зн <= "9") ВЫП ц:=10*ц+(ВЦЕЛ(зн)-ВЦЕЛ("0")); ЧитЗнак(зн) КОН КОН ЧитЦел;
ЗАДАЧА log2(x:ЦЕЛ):ЦЕЛ; (* x > 0 *) ПЕР о:ЦЕЛ; УКАЗ о:=0; ПОКА x > 1 ВЫП x:=x ДЕЛИТЬ 2; УВЕЛИЧИТЬ(о) КОН; ВОЗВРАТ о КОН log2; 9.2. Встроенные задачиСледующая таблица содержит список встроенных задач. Некоторые задачи – обобщённые, т.е. они применимы к данным нескольких видов. Обозначения названий: п – переменная, в – выражение, Вд – вид данных.
Задачи, возвращающие ответ:
Собственно задачи:
Задача СПИСАТЬ(в,п) разрешает присваивание цепочки знаков или ряда из знаков в, содержащего ограничитель 0X, другому ряду из знаков п. В случае необходимости присвоенное значение усекается до размера РАЗМЕР(п)-1. Ряд п всегда будет содержать 0X как ограничитель. 10. ОтделыОтдел – это совокупность объявлений постоянных, видов, переменных и задач с последовательностью указаний, предназначенных для задания переменным отдела их начальных значений.
В отделе-владельце необходимо ставить метки доступности в объявлениях названий тех понятий (см. 3), которые должны быть видимыми в отделах-пользователях. Названия отделов-владельцев, понятия которых используются в данном отделе-пользователе, необходимо перечислить после служебного слова ИСПОЛЬЗУЕТ в начале отдела-пользователя, указывая при необходимости после служебного слова ИЗ путь к текстовому файлу отдела-владельца. Закольцовывание при использовании отделов недопустимо. Путь к служебным отделам ОБХОД (см. 11) и СРЕДА (см. 12) указывать ненужно. Запущенным отделом считается отдел, у которого уже запущены все используемые отделы и выполнена последовательность указаний после слова УКАЗ. Запуск приложения осуществляется запуском отдела, у которого название отмечено "+". Отделы с названиями, отмеченными "-", не должны содержать указаний. Эти отделы служат для объявления понятий отделов-двойников, у которых машинное представление получено через другие языки программирования. 11. Отдел ОБХОДОтдел ОБХОД содержит средства, позволяющие обойти правила совместимости видов, наложенные определением языка. Рекомендуется ограничить использование этих средств отделами низкого уровня. Переменным вида Ячейка можно присваивать значения переменных вида ЗНАК. Если приёмник ссылок имеет вид РЯД ИЗ Ячейка, то соответствующий источник может иметь любой вид. В отделе ОБХОД определён также вид Доступ. Переменным вида Доступ могут быть присвоены значения переменных любого вида ДОСТУП. Соответственно, если приёмник ссылок имеет вид Доступ, то источник может иметь произвольный вид ДОСТУП. Задачи, которые содержатся в отделе ОБХОД, перечислены в таблицах. Обозначения: п – переменная, в и ав – выражения, Вд – вид данных.
Задачи, возвращающие ответ:
Собственно задачи:
12. Среда выполнения12.1. Уборка памятиНет молочка, так сливок дай. В языке существует встроенная задача СОЗДАТЬ, которая распределяет участки данных в свободной памяти. Однако, нет никакого способа явно освободить уже распределённый участок. Взамен этого среда выполнения Глагол-приложений сама производит уборку памяти, после которой задача СОЗДАТЬ сможет распределять неиспользуемые участки памяти под новые данные. Участок считается используемым, если он доступен по цепочке переменных вида ДОСТУП. Эта цепочка может начинаться или от переменных уровня отдела, или от переменных в вызванных на данный момент задачах. Разрыв этой цепочки (например, присваиванием переменной значения ПУСТО) переводит все последующие по цепочке участки в разряд неиспользуемых. Таким образом, уборка памяти избавляет человека от такой непростой задачи, как нахождение правильного способа освобождения памяти при использовании сложных составных данных. 12.2. Описатели видаПри верном псе и сторож спит. Во время выполнения приложения для проверки и охраны вида необходимы данные о виде размещённых переменных. Также и для уборки памяти необходимо знать о расположении свойств вида ДОСТУП в размещённых переменных вида НАБОР. Все эти сведения сохраняются в так называемых описателях вида. Один описатель необходим во время выполнения приложения для каждого вида НАБОР. Для каждой размещённой переменной вида НАБОР в скрытом свойстве ОВ, предшествующем обычным свойствам этой переменной, сохраняется доступ к описателю вида. Каждый описатель вида обязательно хранит ряд доступов ко всем описателям опорных видов (ООВ), начиная с родоначальника и заканчивая доступом к самому себе. Этот ряд необходим для охраны и проверки вида.
Для переменной п вида ЗолотоеЯйцо (см. 5) рисунок показывает устройство данных среды выполнения. Проверка вида – п ЯВЛЯЕТСЯ Вд преобразуется в выражение сравнения: п^.ОВ^.ООВ[УРВ]=ОВ. Уровень расширения вида (УРВ) и описатель вида Вд (ОВ) известны во время преобразования. Например, уровень расширения вида Яйцо – 0 (этот вид не имеет опорных), а уровень расширения вида ЗолотоеЯйцо равен 1. 13. Перевод в машинное представлениеДля того, чтобы отдел можно было выполнять на вычислительной машине, необходимо с помощью преобразователя Глагола перевести текстовое представление этого отдела в машинный код. 13.1. ТексторезТексторез даёт возможность выборочного перевода текста отдела в машинный код. Области перевода задаются указаниями ЕСЛИ ТО (см. 8.3), ограниченными скобками <* и *> (см. 2). В качестве условий для этих указаний могут использоваться только постоянные выражения. Области перевода могут быть вложенными. Пример: ОТДЕЛ отдел; ИСПОЛЬЗУЕТ настрой; (* настройка точности вычислений и др. *) ПОСТ вещ=ВКЛ; (* работа с вещественной или целой арифметикой *) ПЕР длина,ширина: <* ЕСЛИ настрой.точность=2 ТО *> <* ЕСЛИ вещ ТО *> ШИРВЕЩ; <* ИНАЧЕ *> ШИРЦЕЛ; <* КОН *> <* ИНАЧЕ *> <* ЕСЛИ вещ ТО *> ВЕЩ; <* ИНАЧЕ *> ЦЕЛ; <* КОН *> <* КОН *> 13.2. Преобразователь ГлаголаС помощью преобразователя Глагола (ПГ.exe) можно переводить исходные тексты приложений в машинный код формата COFF. В полученном коде переменные простых видов имеют следующий размер (в битах):
Дополнительно ПГ можно настроить для создания кода, содержащего данные для внешнего отладчика, самопроверку работы приложений, отработки встроенной задачи ПРОВЕРИТЬ (см. 9.2), установку в ПУСТО переменных доступа при каждом вызове задач, в которых определены эти переменные. Самопроверка следит за тем, чтобы не было выхода за границы ряда, переполнения при арифметических действиях, выхода за границы допустимых значений простых видов, доступа по значению ПУСТО, деления на ноль. 14. Соответствие видовНе дочитав сказки, не бросай указки.
Одинаковые видыДве переменные п1 и п2 вида В1 и В2 соответственно имеют одинаковый вид, если а) В1 и В2 оба обозначены одним и тем же названием, или б) В2 объявлен как В2=В1, или в) п1 и п2 появляются в одном и том же списке названий переменных, свойств набора или объявлении приёмников и не являются открытыми рядами. Равные видыВиды В1 и В2 называются равными видами, если а) В1 и В2 – одинаковые виды, или б) В1 и В2 – виды открытый ряд с равными опорными видами, или в) В1 и В2 – виды задач, чьи заголовки совпадают. Поглощение числовых видовЧисловые виды поглощают более узкие числовые виды согласно следующему порядку: ШИРВЕЩ >= ВЕЩ >= ШИРЦЕЛ >= ЦЕЛ >= УЗКЦЕЛ. Расширение видов (опорный вид)В объявлении вида Р=НАБОР (О) … КОН, вид Р – непосредственное расширение вида О, а О – непосредственный опорный вид вида Р. Вид Р является расширением вида О (О является опорным видом Р), если а) О и Р – одинаковые виды, или б) Р – непосредственное расширение вида, являющегося расширением вида О. Если ДО=ДОСТУП К О и ДР=ДОСТУП К Р, то вид ДР является расширением вида ДО (вид ДО является опорным видом ДР), если вид Р является расширением вида О. Подобие опорных видов рядаОпорный вид ОВп ряда Вп подобен опорному виду ОВр ряда Вр, если а) ОВп и ОВр – одинаковые виды, или б) ОВп и ОВр – виды ДОСТУП и ОВп есть расширение вида ОВр, или в) ОВр – открытый ряд, ОВп – произвольный ряд, а опорный вид ряда ОВп подобен опорному виду ряда ОВр. Совместимость по присваиваниюВыражение в вида Вв совместимо по присваиванию с переменной п вида Вп, если выполнено одно из следующих условий: а) Вв и Вп – одинаковые виды; б) Вв и Вп – числовые виды и Вп поглощает Вв; в) Вв и Вп – виды НАБОР, Вв есть расширение вида Вп, а п имеет размещённый вид Вп; г) Вв и Вп – виды ДОСТУП и Вв есть расширение вида Вп; д) Вп – вид ДОСТУП или вид ЗАДАЧА, а в – ПУСТО; е) Вп – РЯД N ИЗ ЗНАК, в – цепочка из M знаков и M<N; ж) Вп – вид ЗАДАЧА, а п – название задачи, у которой заголовок совпадает с заголовком Вп; з) Вп – доступ к открытому ряду, Вв – доступ к произвольному ряду, а опорный вид ряда по доступу Вв подобен опорному виду ряда по доступу Вп. Совместимость при вызове задачиВыражение источника и вида Ви совместимо при вызове задачи с приёмником п вида Вп, если выполнено одно из следующих условий: а) Ви совместимо по присваиванию с Вп; б) Вп – ЦЕПЬ, и – цепочка знаков (п не может быть приёмником ссылок для записи); в) Вп – открытый ряд, Ви – произвольный ряд, а опорный вид ряда Ви подобен опорному виду ряда Вп. Совместимость выраженийДля действия данные являются совместимыми выражениями, если их виды соответствуют следующей таблице (в которой указан также и вид ответа выражения). Ряды из знаков, которые сравниваются, должны содержать в качестве ограничителя 0X. Вид Вр должен быть расширением вида Во:
Совпадение заголовков задачДва заголовка задач совпадают, если а) они имеют одинаковое количество приёмников, и б) они имеют или одинаковый вид ответа задачи, или не имеют никакого, и в) приёмники в соответствующих позициях имеют равные виды, и г) приёмники в соответствующих позициях оба – или приёмники значений, или приёмники ссылок. 15. Правила построения языка
|
Вопросы, замечания и предложения высылайте на:
|