Ада-95. Компилятор GNAT
66ac8edd

Использование "is" и символа точки с запятой ';'


Бесконечное горе ждет тех пользователей Ады, которые путают назначение символа точки с запятой ';' с назначением "is".

При использовании некоторых компиляторов, это приводит к длинной последовательности сообщений об ошибках.

Наиболее вероятен случай использования точки с запятой вместо is - при описании подпрограмм, также как это делается в языке Паскаль:

procedure Do_Something(X : Integer); -- <---- это подразумевает проблему!!!

-- описания

begin

-- инструкции

end Do_Something;

Проблема заключается в том, что такое использование символа точки с запятой допустимо, но смысл его отличается от того, что вы ожидаете.

Строка:

procedure Do_Something(X : Integer);

является, в реальности, описанием спецификации процедуры, что в языке Паскаль больше похоже на опережающее описание процедуры с помощью директивы forward.

Следовательно, перепутывание символа точки с запятой ';' с is

почти гарантировано приводит к порождению большого количества сообщений об ошибках компилятора, поскольку синтаксический анализатор компилятора Ады будет трактовать такую инструкцию как спецификацию подпрограммы и будет сбит с толку появлением последующего блока begin-end, который ошибочно располагается вне контекста.

Появление is точно указывает Ада-компилятору на то, что далее следует тело подпрограммы.

Спецификации подпрограмм, являющиеся частью спецификации пакета, могут рассматриваться в контексте опережающих описаний, для чего в Паскале обычно используется директива forward.

В этом случае, первая строка тела подпрограммы (в теле пакета) должна быть идентична спецификации, за исключением того, что символ точки с запятой ';' заменяется на is.

Это отличается от Паскаля, где список параметров может не повторяться.

Copyright (C) А.Гавва V-0.4w май 2004



Содержание раздела