Организация и функционирование компьютеров


БНФ - метаязык описания синтаксиса языков программирования - часть 2


Приведем несколько примеров. Непустой список, состоящий из произвольного числа элементов, разделенных запятой, описывается так:

<список> ::= <элемент списка> {, <элемент списка>}

Если же список может быть пустым, то его описание будет выглядеть так:

<список> ::=  | <элемент списка> {, <элемент списка>}

Другой пример. Идентификатором является последовательность букв и цифр, начинающаяся с буквы:

<идентификатор>::=<буква>{<буква>|<цифра>}

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

<заголовок процедуры> ::=

procedure <имя процедуры> [(<параметры>)];

Использование круглых скобок иллюстрируется на примере описания процедуры или функции, которое является либо описанием процедуры, либо описанием функции, после чего следует точка с запятой:

<процедура или функция>::=(<процедура>|<функция>);

Мы не будем давать полного описания синтаксиса Турбо Паскаля на языке БНФ, а приведем несколько фрагментов. Вот как описывается общая структура программы на Паскале в терминах языка БНФ:

<описание программы> ::=

    <заголовок программы>

    <блок объявлений>

    <блок процедур и функций>

    <операторная часть> .

<заголовок программы> ::=

    program

<имя программы> [ (<список параметров>) ];

<блок объявлений> ::={<раздел объявлений>; }

<раздел объявлений> ::= <раздел констант> | <раздел типов> |

   

<раздел переменных> | <раздел меток> | <раздел модулей>

<раздел констант> ::=

   

const <описание константы> {; <описание константы>}

<описание константы> ::= <имя константы> [ : <тип> ] =

<выражение>

<раздел типов> ::= type <описание типа> {; <описание типа>}

<описание типа> ::= <имя типа> = <тип>

<раздел переменных> ::=




- Начало -  - Назад -  - Вперед -