Следующие несколько глав посвящены формальному определению языка Borland Pascal. В каждой главе обсуждается один из элементов Borland Pascal. Совместно эти элементы образуют программу Borland Pascal.
Однако, изучая части, трудно понять целое. В данной главе дается общий обзор программы Borland Pascal, опуская детали. Здесь приводится краткое описание каждого элемента программы, а затем показывается, как все это компонуется вместе. Подробности элементов языка освещаются главах 2 - 11.
В своей простейшей форме программа Borland Pascal состоит из заголовка программы, который именует программу, и основного программного блока, выполняющего назначение программы. В основном программном блоке находится секция кода, заключенная между ключевыми словами begin и end. Приведем простейшую программу, иллюстрирующую эти принципы:
program Privet;
begin
Writeln('Добро пожаловать в Borland Pascal');
end.
Первая строка - это заголовок программы, который именует данную программу. Остальная часть программы - это исходный код, который начинается ключевым словом begin и заканчивается end. Хотя данная конкретная программа содержит только одну строку, их может быть много. В любой программе Borland Pascal все действия выполняются между begin и end.
Код между последними операторами begin и end программы управляет логикой программы. В очень простой программе в этой секции кода может содержаться все, что вам нужно. В более крупных и сложных программах размещение в этой секции всего программного кода может затруднить чтение и понимание программы. К тому же ее будет труднее разрабатывать.
Процедуры и функции позволяют разделить логику программы на более мелкие и управляемые фрагменты и аналогичны подпрограммам в других языках. Как и в основном блоке программы, все действия в процедурах и функциях заключаются в begin и end. Каждый из этих сегментов кода выполняет конкретную задачу.
Рис. 1.1 Диаграмма процедуры или функции.
Если вы обнаружите, что в вашей диаграмме одни и те же действия выполняются многократно, такую логику желательно выделить в процедуру или функцию. Вы можете один раз записать этот код в процедуре или функции, а затем многократно вызывать его в программе.
Приведем пример функции. Следующая функция GetNumber получает число от пользователя:
function GetNumber: Real;
var
Responce: Real;
begin
Write('Введите число: ');
Readln(Response);
GetNumber := Response;
end;
Процедура или функция должна содержаться в программе перед секцией основного кода. В основном коде она может затем использоваться (вызываться).
Рис. 1.2 Простая программа на Паскале.
В следующем примере дается набросок программы, в которой используется функция GetNumber. Программист разделил логику программы на три задачи:
Основная логика программы заключена в последнем блоке begin..end.
Program Report;
var
A: Real;
{ другие описания }
.
.
.
function GetNumber: Real;
var
Responce: Real;
begin
Write('Введите число: ');
Readln(Response);
GetNumber := Response;
end;
procedure Calculate(X: Real);
.
.
.
procedure PrintReport;
.
.
.
begin
A: = GetNumber;
Calculate(A);
PrintReport;
end.
Основная логика программы достаточно проста для понимания. Все детали убраны в тела процедур и функций. Использование процедур и функций позволяет вам рассматривать программу более удобным и модульным способом.
Исходный код между begin и end содержит операторы, которые описывают выполняемые программой действия. Это называются операторной частью программы. Приведем примеры операторов:
A := B + C; { присвоить значение }
Calculate(Length, Height); { активизировать процедуру }
if X < 2 then { оператор условия }
Answer := X * Y;
begin { составной оператор }
X := 3;
Y := 4;
Z := 5;
end;
while not EOF(InFile) do { оператор цикла }
begin
ReadLn(InFile, Line);
Process(Line);
end;
В простых операторах можно присваивать значение, активизировать процедуру или функцию или передавать управление на другую часть кода. Структурные операторы могут быть составными и содержать несколько операторов, оператор цикла или оператор условия, управляющий логикой программы, а также операторы with, упрощающие доступ к данным в записи.
Оператор Паскаля состоит из выражений. Выражения оператора могут состоять из операндов и операций. Обычно в выражениях выполняется сравнение либо арифметические, логические или булевские операции.
Выражения Паскаля могут состоять из более простых выражений. О комбинации операндов и операций вы можете прочитать в Главе 6. Они могут быть достаточно сложными. Приведем некоторые примеры выражений:
X + Y
Done <> Error
I <= Length
-X
Лексемы - это наименьшие значащие элементы в программе Паскаля. Они образуются операндами и операциями выражений. Лексемы - это специальные символы, зарезервированные слова, идентификаторы, метки и строковые константы. Приведем примеры лексем Паскаля:
function { зарезервированное слово }
( { специальный символ }
:= { специальный символ }
Calculate { идентификатор процедуры }
9 { число }
Приведем пример, из которого вы можете видеть, что операторы состоят из выражений, которые в свою очередь состоят из лексем.
Рис. 1.3 Диаграмма оператора.
Переменная может содержать изменяемое значение. Каждая переменная должна иметь тип. Тип переменной определяет множество значений, которые может иметь переменная.
Например, в следующей программе описываются переменные X и Y, имеющие тип Integer. Таким образом, X и Y могут содержать только целые значения (числа). Если в вашей программе предпринимается попытка присвоить этим переменным значения другого типа, Borland Pascal сообщает об ошибке.
program Example;
const
A = 12; { константа A не изменяет значения }
B: Integer = 23; { типизированная константа B получает
начальное значение }
var
X, Y: Integer; { переменные X и Y имеют тип Integer }
J: Real; { переменная J имеет тип Real }
begin
X := 7; { переменной X присваивается значение }
Y := 7; { переменной Y присваивается значение }
X := Y + Y; { значение переменной X изменяется }
J := 0.075; { переменной J присваивается значение
с плавающей точкой }
end.
В этой простой и не очень полезной программе X первоначально присваивается значение 7; двумя операторами ниже ей присваивается новое значение: Y + Y. Как можно видеть, значение переменной может изменяться.
A - это константа. Программа назначает ей значение 12, и это значение изменяться не может - в ходе выполнения программы оно остается постоянным.
B представляет собой типизированную константу. Ей присваивается значение при описании, но дается также тип Integer. Типизированую константу можно рассматривать как переменную с начальным значением. Позднее программа может изменить первоначальное значение B на какое-то другое значение.
Если вы вернетесь обратно к приведенному в начале главы примеру кода, то увидите, что функция GetNumber имеет раздел описаний, в котором описывается переменная. Процедуры и функции могут содержать разделы описаний также как программы и модули.
Теперь, когда вы познакомились с основными компонентами программы Borland Pascal, давайте посмотрим, как все это работает вместе. Приведем диаграмму программы Borland Pascal:
Рис. 1.4 Расширенная диаграмма программы на Паскале.
Программу на Паскале составляют заголовок программы, необязательный оператор uses (о нем будет рассказано позднее) и основной блок программы. В основном блоке могут присутствовать более мелкие блоки процедур и функций. Хотя на диаграмме это не показано, процедуры им функции могут быть вложенными в другие процедуры или функции. Другими словами, блоки могут содержать другие блоки.
В сочетании с другими лексемами и пробелами лексемы могут образовывать выражения, формирующие оператор. Операторы, в свою очередь, в сочетании с разделом описаний образуют блоки основной программы или блок в процедуре или функции.
Программа Borland Pascal может использовать блоки кода в программных модулях. Модуль (unit) можно рассматривать как мини-программу, которую может использовать ваша прикладная программа. Как и программа, он имеет заголовок (который называется заголовком модуля) и основной блок, ограниченный begin и end.
Основной блок любой программы Borland Pascal может включать в себя строку, позволяющую программе использовать один или более модулей. Например, если вы пишете программу DOS с именем Colors и хотите изменять цвета выводимого на экран текста, то ваша программа может использовать стандартный модуль Crt, являющийся частью библиотеки исполняющей системы Borland Pascal:
program Colors;
uses Crt;
begin
.
.
.
end.
Строка uses Crt сообщает Borland Pascal, что нужно включить модуль Crt в выполняемую программу. Кроме всего прочего, модуль Crt содержит весь необходимый код для изменения цвета в вашей программе. Путем простого включения uses Crt ваша программа может использовать весь код, содержащийся в модуле Crt. Поэтому оператор uses называют также оператором использования. Если бы вы поместили весь код, необходимый для реализации функциональных возможностей Crt, в свою программу, это потребовало бы огромных усилий и отвлекло бы вас от основной цели программы.
Библиотеки исполняющей системы Borland Pascal включают в себя несколько модулей, которые вы найдете весьма полезными. Например, благодаря использованию модулей Dos или WinDos, ваша программа может получить доступ к нескольким подпрограммам операционной системы и подпрограммам работы с файлами.
Вы можете также писать свои собственные модули. Применяйте их для разделения больших программ на логические связанные фрагменты. Программный код, который вы помещаете в модуль, может использоваться любой программой. Вам нужно написать исходный код только один раз, а затем вы сможете много раз его использовать.
При изучении глав 2 - 11, где определяется язык Borland Pascal, вы встретите синтаксические диаграммы, например:
Чтобы прочитать диаграмму, следуйте по стрелкам. Часто встречаются альтернативные пути: путь, начинающийся слева и заканчивающийся стрелкой справа, является допустимым. Путь пересекает блоки, содержащие имена элементов, используемых для построения этой части синтаксиса.
Имена в прямоугольных рамках с текстом должны быть заменены действительными конструкциями. Некоторые рамки содержат зарезервированные слова, знаки операций и знаки пунктуации, то есть фактические термы, используемые в программе. Имена в блоках - это конструкции языка. Имена, написанные по-английски (например, procedure), представляю собой зарезервированные слова и операции Borland Pascal.