2. Элементы языка

Элементы языка - это минимальные неделимые ее части, еще несущие в себе определенную значимость для компилятора. К элементам относятся:

  • зарезервированные слова;
  • идентификаторы;
  • типы;
  • константы;
  • переменные;
  • метки;
  • подпрограммы;
  • комментарии.

Зарезервированные слова

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

Идентификаторы

Это слова, которыми программист обозначает любой другой элемент программы, кроме зарезервированного слова, идентификатора или комментария. Идентификаторы в Object Pascal могут состоять из латинских букв, арабских цифр и знака подчеркивания. Никакие другие символы или специальные знаки не могут входить в идентификатор. Из этого простого правила следует, что идентификаторы не могут состоять из нескольких слов (нельзя использовать пробел) или включать в себя символы кириллицы (русского алфавита).

Типы

Это специальные конструкции языка, которые рассматриваются компилятором как образцы для создания других элементов программы, таких как переменные, константы и функции. Любой тип определяет две важные для компилятора вещи: объем памяти, выделяемый для размещения элемента (константы, переменной или результата, возвращаемого функцией), и набор допустимых действий, которые программист может совершать над элементами данного типа. Замечу, что любой определяемый программистом идентификатор должен быть описан в разделе описаний (перед началом исполняемых операторов). Это означает, что компилятор должен знать тот тип (образец), по которому создается определяемый идентификатором элемент.

Константы

Определяют области памяти, которые не могут изменять своего значения в ходе работы программы. Как и любые другие элементы программы, константы могут иметь свои собственные имена. Объявлению имен констант должно предшествовать зарезервированное слово const (от англ. constants - константы). Например, мы можем определить константы:

const
  Kbyte = 1024;
  Mbyte = Kbyte * Kbyte;
  Gbyte = 1024 * Mbyte;

чтобы вместо длинных чисел 1048576 (1024*1024) и 1073741824 (1024*1024*1024) писать, соответственно, Mbyte и Gbyte. Тип константы определяется способом ее записи и легко распознается компилятором в тексте программы, поэтому программист может не использовать именованные константы (т. е. не объявлять их в программе явно).

Переменные

Cвязаны с изменяемыми областями памяти, т. е. с такими ее участками, содержимое которых будет меняться в ходе работы программы. В отличие от констант переменные всегда объявляются в программе. Для этого после идентификатора переменной ставится двоеточие и имя типа, по образу которого должна строиться переменная. Разделу объявления переменной (переменных) должно предшествовать слово var. Например:

var
  inValue: Integer;
  byValue: Byte;

Здесь идентификатор inValue объявляется как переменная типа Integer, а идентификатор byValue - как переменная типа Byte. Стандартный (т. е. заранее определенный в Object Pascal) тип integer определяет четырехбайтный участок памяти, содержимое которого рассматривается как целое число в диапазоне от -2 147 483 648 до +2 147 483 647, а стандартный тип Byte - участок памяти длиной 1 байт, в котором размещается беззнаковое целое число в диапазоне от 0 до 255.

5. Объявление констант Константы объявляются в разделе const: const

MAX_LEN = 150;
Msg = ‘Привет, МИР!!!’;

В модуле может быть неограниченное количество разделов const. Область видимости констант – от начала объявления до конца модуля. Примечание. Pascal Script не поддерживает в объявлении констант конструкторы множеств, массивов, неопределенный указатель nil, вызовы функций.

Объявление переменных

Переменные объявляются в разделе var. Переменные делятся на локальные и глобальные. Пример:

var
  MyVar: Integer;	// Пример глобальной переменной. Переменная видима в пределах модуля.
 
procedure MyProc;
var
  s: string;		// Пример локальных переменных. 
  i, j: integer;	// Переменные видимы в пределах процедуры.
beginend;

Ключевого слова var является началом раздела объявления переменных. Переменные одного типа можно перечислять через запятую. В модуле может быть неограниченное количество разделов var. Область видимости переменных – от начала объявления до конца модуля.

Метки

Это имена операторов программы. Метки используются очень редко и только для того, чтобы программист смог указать компилятору, какой оператор программы должен выполнятся следующим. Метки, как и переменные, всегда объявляются в программе. Разделу объявлений меток предшествует зарезервированное слово label (метка). Например:

Label Loop;
begin
  goto Loop;
  // Программист требует передать управление
  // оператору, помеченному меткой Loop.// Эти операторы будут пропущены
Loор:
  // Оператору, идущему за этой меткой,
  // будет передано управлениеend;

Подпрограммы

Это специальным образом оформленные фрагменты программы. Замечательной особенностью подпрограмм является их значительная независимость от остального текста программы. Говорят, что свойства подпрограммы локализуются в ее теле. Это означает, что, если программист что-либо изменит в подпрограмме, ему, как правило, не понадобится в связи с этим изменять что-либо вне подпрограммы. Таким образом, подпрограммы являются средством структурирования программ, т. е. расчленения программ на ряд во многом независимых фрагментов.

В Object Pascal есть два сорта подпрограмм: процедуры и функции. Функция отличается от процедуры только тем, что ее идентификатор можно наряду с константами и переменными использовать в выражениях, т. к. функция имеет выходной результат определенного типа. Если, например, определена функция

function MyFunction: Integer;

и переменная

var X: Integer;

то возможен такой оператор присваивания:

Х := 2 * MyFunction - l;

Имя процедуры нельзя использовать в выражении, т. к. процедура не имеет связанного с нею результата:

procedure MyProcedure;
…
X := 2 * MyProcedure - l; // Ошибка!