<декларация переменных>::= DECLARE <декларируемые имена> <тип>;
<декларируемые имена> ::== <идентификатор>
| <список декларируемых имен>>
<список декларируемых имен>::= <<идентификатор>
| <список декларируемых имен>, <идентификатор>
<Декларация переменных> наделяет <типом> <идентификаторы>, употребленные среди <декларируемых имен>. <Идентификаторы> не получают начальных значений. Имя <кроме имени поля> в <теле сегмента> может определяться или декларироваться не более одного раза.
<определение процедуры> ::= <определение подпрограммы>
|<определение функции>
|<определение внешней подпрограммы>
| <определение внешней функции>
<определение подпрограммы>::= <заголовок подпрограммы>: <тело подпрограммы> <конец подпрограммы>
<определение функции> ::= <заголовок функции>: <тело функции> <конец функции>
<определение внешней подпрограммы>::= <заголовок внешней подпрограммы>
<определение внешней функции>::=<заголовок внешней функции>;
<заголовок подпрограммы>::= PROCEDURE <имя процедуры>
<заголовок функции>::= FUNCTION <имя процедуры> <тип>
<тело подпрограммы>::= <тело сегмента>
<тело функции>::= <тело сегмента>
<конец подпрограммы>::= END PROCEDURE <идентификатор>;
<конец функции> ::= END FUNCTION <идентификатор>;
<имя процедуры>::= <идентификатор>
|<идентификатор> <список внутренних параметров>
<список внутренних параметров> ::= <заголовок внутренних параметров>)
<заголовок внутренних параметров> ::= (<внутренний параметр
|<заголовок внутренних параметров>, <внутренний параметр>
<внутренний параметр>::= <идентификатор> <тип>
| <идентификатор> <тип> NAME
Непосредственно в <теле сегмента> можно определить лишь одну процедуру с данным именем. Определение <внешней подпрограммы> или <внешней функции> дается только заголовком, поскольку тело <внешней процедуры> доставит та же или другая <единица компиляции>. В локальном и окончательном определении процедуры должны совпадать имя процедуры, порядок, тип и способ передачи формальных параметров; это соответствие проверит загрузчик. Напомним, что параметры <внешней процедуры> должны иметь <базовый тип>. Определение локальных процедур дается аналогично. <Внутренние параметры>, так же как и возвращаемые функциями значения, могут иметь любой <тип>. Перед <концом подпрограммы> располагается неявная <инструкция возврата>. Выход из функции должен осуществляться посредством явной <инструкции возврата>, снабженной значением. Параметры с пометкой NAME передаются по имени, остальные — по значению. Сами по себе процедуры напоминают алгольные. Рекурсия допускается в полном объеме. <Имя процедуры> нельзя использовать до его декларации.
<выполняемая инструкция>::=<инструкция присваивания>
|<инструкция вызова>
|<инструкция возврата>
|<инструкция завершения>
|<условная инструкция>
|<составная инструкция>
|<инструкция цикла>