В данной статье описывается структура программы в Pascal, описывается каждый раздел, который может присутствовать в программе.
Программист вводит текст программы, произвольно располагая строки на экране. Отступ слева выбирает сам программист, чтобы программа была более читабельной. В одной строке допускается писать несколько операторов. Длинные операторы можно переносить на следующую строку. Перенос допускается в любом месте, где можно сделать пробел. Максимальная длина строки не должна превышать 127 символов. Из соображений наглядности, удобства просмотра и отладки программы рекомендуется длину строки ограничивать 80 символами. Программы имеют жесткую структуру, описанную в таблице 12.
Синтаксические правила построения предложений языка можно описывать следующими способами:
Раздел описания модулей USES.
Раздел имеет структуру:
USES Модуль 1, Модуль 2, ... Модуль N, где за ключевым словом USES указывается список, в котором перечисляются все имена библиотек (модулей) стандартных и пользовательских, к процедурам и функциям которых есть обращение в программе. Если таких обращений нет, то раздел USES не нужен.
Пример:
USES CRT, GRAPH, HELP, MYLIB;
В этом примере две стандартные библиотеки — CRT, GRAPH и две пользовательские библиотеки — HELP, MYLIB.
Раздел описания меток LABEL.
Раздел имеет структуру:
LABEL Метка 1, Метка 2, Метка N, где за ключевым словом LABEL указывается список, в котором перечисляются все имена меток, встречающихся в программе.
Пример:
LABEL Ml, 12_BL, 9999;
Метки позволяют менять естественный ход выполнения программы. Ссылка на метку осуществляется оператором GOTO . Если в программе меток нет, то раздел LABEL отсутствует. В теле программы (в разделе операторов) метка ставится перед требуемым оператором и отделяется от него двоеточием.
Пример:
М27: X := А * В - С/2;
Областью действия метки является блок, где она описана. Ниже приведена схема использования меток в тексте программы.
LABEL метка 1, метка 2;
BEGIN
метка 1: <оператор 1="">;
…
метка 2: <оператор 2="">;
…
END.
Раздел описания констант CONST.
Раздел существует, если в алгоритме используется по крайней мере одна константа, то есть величина, не изменяющая своего значения в процессе выполнения программы. Попытка изменить значение константы в теле программы будет обнаружена на этапе трансляции.
В стандарте на Паскаль константы определяются следующим способом:
CONST
<идентификатор 1=""> = <3начение 1="">;
<идентификатор 2=""> = <3начение 2="">;
<идентификатор n=""> = < Значение N>;
Примеры констант:
CONST
А = 15.7;
BXZ = 'Серия N123/5';
MIN_IND = id="mce_marker"5D;
С_10 = -0.57Е-6;
L125 = 695;
FLAG = TRUE;
Константа может иметь только предопределенный (стандартный) тип данных. Тип присваивается константе по внешнему виду значения и в соответствии с этим типом отводится память для хранения значения константы.
В качестве расширения стандартного Паскаля разрешено использовать выражения, составленные из ранее определенных констант и некоторых стандартных функций (Abs, Chr, Hi, Length, Lo, Odd, Ord, Pred, Prt, Round, SizeOf, Succ, Swap, Trunc). Примеры использования константных выражений:
CONST
Min = 0;
Max = 250;
Centr = (Max-Min) div 2;
Beta = Chr(225);
NumChars = Ord('2') - Ord('A')+l;
Message = 'не хватает памяти';
ErrStr = 'Ошибка:' + Message + '.';
Ln10 - 2.302585092994045884;
Ln10R = 1/Ln10;
Константные выражения вычисляются компилятором без выполнения программы на этапе ее создания.
Раздел описания типов TYPE.
Стандартные типы данных (REAL, INTEGER, BOOLEAN, CHAR) не требуют описаний в этом разделе. Описания требуют только типы, образованные пользователем.
Концепция типов — одно из основных понятий в языке. С каждым данным связывается один и только один определенный тип.
Тип — это множество значений + множество операций, которые можно выполнять над этими значениями, то есть правила манипулирования данными. Использование типов позволяет выявлять многочисленные ошибки, связанные с некорректным использованием значений или операций еще на этапе трансляции без выполнения программ.
О Паскале говорят, что он строго типизирован, то есть программист должен описать все объекты, указывая их типы, и использовать в соответствии с объявленными типами. Программы становятся более надежными и качественными. При компиляции информация используется для уточнения вида операции. Так знаком + для данных типа REAL и INTEGER обозначается операция сложения, а для множеств (тип SET) — объединение. Структура раздела описания типов имеет вид:
TYPE
<имя 1=""> = <значение 1="">;
<имя 2=""> = <значение 2="">;
…
<имя l=""> = <значение l="">;
Имя типа представляет собой идентификатор, который может употребляться в других типах, описанных вслед за данным типом. Раздел TYPE не является обязательным, так как тип можно описать и в разделе переменных VAR. Примеры описания пользовательских типов:
TYPE
DAY = 1..31; Year = 1900.. 2000; {Интервальный тип}
LatBukv = ('А', 'С, 'D', 'G, 'Н'); {Перечисляемый тип}
Matr = array[-1..12, 'А'.. 'F'] of real; {Регулярный тип}
Раздел описания переменных VAR.
Это обязательный раздел. Любая встречающаяся в программе переменная должна быть описана. В языке нет переменных, объявляемых по умолчанию. Основная цель этого раздела определить количество переменных в программе, какие у них имена (идентификаторы) и данные каких типов хранятся в этих переменных. Таким образом, переменная это черный ящик, а тип показывает, что мы в него можем положить.
Структура раздела имеет вид:
VAR
<список 1="">:<тип 1="">;
<список 2="">:<тип 2="">;
…
<список n="">:<тип n="">;
Тип переменных представляет собой имя (идентификатор), описанный в разделе TYPE при явном описании типа, или собственно описание типа в случае его неявного задания. Примеры описания переменных:
TYPE
DAY= 1..31; Matr = ARRAY[1..5,1..8] OF INTEGER;
VAR
A, B: DAY; X, Y: Matr; {явное описание типов }
YEAR: 1900.. 2000; LES: (LPT, PRN); {неявное описание типов }
А, В, CD, FER51: REAL; {описание переменных стан-}
EQUAL: BOOLEAN; SH: CHAR; {дартных типов производится }
I, J, К: INTEGER; {только в разделе VAR}
Раздел описания процедур и функций.
Стандартные процедуры и функции, имена которых включены в список зарезервированных слов, в этом разделе не описываются. Описанию подлежат только процедуры и функции, определяемые пользователем.
PROCEDURE <имя> (<параметры>); {заголовок процедуры}
<разделы> {тело процедуры }
BEGIN
<раздел>
END;
FUNCTION <имя>(<параметры>): <тип>; { заголовок }
<разделы> {тело функции}
BEGIN
<раздел>
Структура процедур и функций та же самая, что и у основной программы. Отличие описаний состоит в том, что идентификаторы констант, переменных, процедур и функций, описанных в соответствующих разделах описаний пользовательских процедур и функций, распространяются только на блоки, где они описаны и на блоки внутренние по отношению к ним. На внешние блоки, в том числе на тело основной программы, они не распространяются.
Раздел операторов.
Это основной раздел, именно в нем в соответствии с предварительным описанием переменных, констант, функций и процедур выполняются действия, позволяющие получать результаты, ради которых программа и писалась.
Синтаксис раздела операторов основной программы:
BEGIN
<оператор 1=""> { Операторы выполняются}
<оператор 2=""> { строго последовательно}
… {друг за другом.}
<оператор n="">
END.
Комментарий.
Это пояснительный текст, который можно записать в любом месте программы, где разрешен пробел. Текст комментария ограничен: слева - '{', справа - '}', и может содержать любые символы. Комментарий игнорируется транслятором, и на программу влияния не оказывает.
Пример использования комментария:
PROGRAM PR;
<разделы>
BEGIN
<оператор 1="">
<оператор 2="">
{< Оператор 3; >
…
<оператор n=""> }
END.
Средства комментария часто используются для отладки. Так в приведенном выше примере, операторы — 3,... N, заключенные в фигурные скобки, временно не выполняются.
Правила пунктуации.
Основным средством пунктуации является символ точка с запятой – ';'.
1. Точка с запятой не ставится после слов LABEL, TYPE, CONST, VAR, а ставится
после каждого описания этих разделов.
2. Точка с запятой не ставится после BEGIN и перед END, так как эти слова – операторные скобки.
3. Точка с запятой разделяет операторы, и ее отсутствие вызовет:
А := 333 {ошибка — нет ';'}
В := А/10;;;;; {четыре пустых оператора}
4. Возможна ситуация:
END; следует писать END
END; > END
END; END;
5. Допускается запись метки на пустом операторе — <метка>: ;
6. Точка с запятой не ставится после операторов WHILE, REPEAT, DO и перед UNTIL.
7. В условных операторах ';' не ставится после THEN и перед ELSE.
Предыдущая статья: Стандартные функции в Паскаль.
Оглавление: Лекции по Pascal.
Следующая статья: Программирование вычислительных процессов.
Комментарии