Структура программы в Паскаль.
В данной статье описывается структура программы в Pascal, описывается каждый раздел, который может присутствовать в программе.
Программист вводит текст программы, произвольно располагая строки на экране. Отступ слева выбирает сам программист, чтобы программа была более читабельной. В одной строке допускается писать несколько операторов. Длинные операторы можно переносить на следующую строку. Перенос допускается в любом месте, где можно сделать пробел. Максимальная длина строки не должна превышать 127 символов. Из соображений наглядности, удобства просмотра и отладки программы рекомендуется длину строки ограничивать 80 символами. Программы имеют жесткую структуру, описанную в таблице 12.
Синтаксические правила построения предложений языка можно описывать следующими способами:
- схемой (форматом предложения или раздела). В учебном процессе выбран именно этот способ, поскольку он наиболее понятен начинающему программисту;
- синтаксической диаграммой. Этот способ детально формализует синтаксис предложения и используется разработчиками трансляторов с языка Паскаль;
- порождающими правилами РАСШИРЕННЫХ БЭКУСА-НАУРА ФОРМ (РБНФ). Это весьма компактный и в то же самое время наглядный способ записи языковых конструкций. Этот способ используется в статьях и научных разработках. В данном курсе используются только пять элементов РБНФ (таблица 13).
Раздел описания модулей 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 = 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 не является обязательным, так как тип можно описать и в разделе переменных VAR. Примеры описания пользовательских типов:TYPE DAY = 1..31; Year = 1900.. 2000; LatBukv = ('А', 'С, 'D', 'G, 'Н'); Matr = array[-1..12, 'А'.. 'F'] of real;
Раздел описания переменных VAR.Это обязательный раздел. Любая встречающаяся в программе переменная должна быть описана. В языке нет переменных, объявляемых по умолчанию. Основная цель этого раздела определить количество переменных в программе, какие у них имена (идентификаторы) и данные каких типов хранятся в этих переменных. Таким образом, переменная это черный ящик, а тип показывает, что мы в него можем положить.Структура раздела имеет вид:
Тип переменных представляет собой имя (идентификатор), описанный в разделе 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;
Раздел описания процедур и функций.Стандартные процедуры и функции, имена которых включены в список зарезервированных слов, в этом разделе не описываются. Описанию подлежат только процедуры и функции, определяемые пользователем.
Структура процедур и функций та же самая, что и у основной программы. Отличие описаний состоит в том, что идентификаторы констант, переменных, процедур и функций, описанных в соответствующих разделах описаний пользовательских процедур и функций, распространяются только на блоки, где они описаны и на блоки внутренние по отношению к ним. На внешние блоки, в том числе на тело основной программы, они не распространяются.
Раздел операторов.Это основной раздел, именно в нем в соответствии с предварительным описанием переменных, констант, функций и процедур выполняются действия, позволяющие получать результаты, ради которых программа и писалась.Синтаксис раздела операторов основной программы:BEGIN<оператор 1=""> < Операторы выполняются><оператор 2=""> < строго последовательно>… <оператор n="">END.
Комментарий.Это пояснительный текст, который можно записать в любом месте программы, где разрешен пробел. Текст комментария ограничен: слева - '', и может содержать любые символы. Комментарий игнорируется транслятором, и на программу влияния не оказывает.Пример использования комментария:PROGRAM PR;<разделы>BEGIN<оператор 1=""><оператор 2="">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.