БНФ - метаязык описания синтаксиса языков программирования - часть 3
var
<объявление переменных> {; <объявление переменных>}
<объявление переменных> ::=
<имя переменной> {, <имя переменной> }:
<тип>
<раздел меток> ::= label <метка> {, <метка>}
<метка> ::= <целое без знака> | <идентификатор>
<раздел модулей> ::= uses <имя модуля> {, <имя модуля>}
<блок процедур и функций> ::= {<описание процедуры или функции> }
<описание процедуры или функции>::=
(<описание процедуры> | <описание функции>) ;
<описание процедуры> ::=
<заголовок процедуры>
<блок объявлений>
<заголовок процедуры> ::=
procedure
<имя процедуры> [(<список формальных параметров>)];
<список формальных параметров> ::=
<формальный параметр> { ; <формальный параметр> }
<формальный параметр> ::=
[var] <имя параметра> {, <имя параметра> }: <имя типа>
<описание функции> ::=
<заголовок функции>
<блок объявлений>
<операторная часть>
<заголовок функции> ::= function <имя функции>
[ (<список формальных параметров>) ] : <имя типа>;
<операторная часть> ::=
begin ( | <оператор>{; <оператор>
}) end
Для полноты картины необходимо добавить, что имена констант, типов, переменных, модулей, функций и процедур являются идентификаторами.
В качестве другого примера фрагмента синтаксиса Паскаля приведем описание спецификации типа:
<тип> ::= <имя стандартного типа> | <имя пользовательского типа> |
<перечислимый тип> | <диапазон> | <тип массива> | <тип записи> |
<тип множества> | <тип файла>
<перечислимый тип> ::= ( <идентификатор> {,
<идентификатор> } )
<диапазон> ::= <значение> .. <значение>
<тип массива> ::= array [<имя типа> | <диапазон>] of <тип>
<тип записи> ::= record <поле записи> {; <поле записи> } end
<поле записи> ::= <имя поля> : <тип>
<тип множества> ::= set of ( <имя типа> | <диапазон> )
<тип файла> ::= file of <тип>
