Использование "is" и символа точки с запятой ';'
Использование "is"
и символа точки с запятой ';'
Бесконечное горе ждет тех пользователей Ады, которые путают назначение символа точки с запятой ';' с назначением "is".При использовании некоторых компиляторов, это приводит к длинной последовательности сообщений об ошибках.Наиболее вероятен случай использования точки с запятой вместо is - при описании подпрограмм, также как это делается в языке Паскаль:
procedure Do_Something(X : Integer); -- <---- это подразумевает проблему!!! -- описанияbegin -- инструкцииend Do_Something; |
Проблема заключается в том, что такое использование символа точки с запятой допустимо, но смысл его отличается от того, что вы ожидаете.Строка:
procedure Do_Something(X : Integer); |
является, в реальности, описанием спецификации процедуры,
что в языке Паскаль больше похоже на опережающее описание процедуры
с помощью директивы forward.Следовательно, перепутывание символа точки с запятой ';' с is
почти гарантировано приводит к порождению большого количества сообщений об ошибках компилятора,
поскольку синтаксический анализатор компилятора Ады
будет трактовать такую инструкцию как спецификацию подпрограммы
и будет сбит с толку появлением последующего блока begin-end,
который ошибочно располагается вне контекста.Появление is точно указывает Ада-компилятору на то, что
далее следует тело подпрограммы.
Спецификации подпрограмм,
являющиеся частью спецификации пакета,
могут рассматриваться в контексте опережающих описаний,
для чего в Паскале обычно используется директива forward.В этом случае, первая строка тела подпрограммы (в теле пакета) должна быть идентична спецификации,
за исключением того, что символ точки с запятой ';'
заменяется на is.Это отличается от Паскаля, где список параметров может не повторяться.
Содержание раздела