Форма Бэкуса-Наура (БНФ)

БНФ - это формальный способ описания синтаксических единиц, при котором они определяются через другие единицы или через элементарные символы.

В некоторых задачах на разбор выражений часть условия может быть представлена в форме БНФ, поэтом ниже приведем несколько примеров такого описания с комментариями.

<цифра>::='0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9'

Имена синтаксических единиц заключаются в угловые скобки. После имени следует знак ::= (читается как "это есть" или "по определению есть"), после него следует описание данной единицы. В приведенном примере сказано, что есть единица, называемая "цифра", которая может быть одним из следующих символов. Знак '|' означает "или".

<число_без_знака>::=<цифра>{<цифра>}

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

<знак>::='+'|'-'; <число_со знаком>::=<знак><число_без_знака>

Последовательное упоминание двух или более синтаксических единиц говорит, что более крупная единица состоит из более мелких, идущих именно в том порядке, как они описаны в БНФ. Так, в примере, "число со знаком" начинается с одного знака, который должен быть указан, за которым следует число без знака.

<плюс>::='+' <сумма>::=<число>{<плюс><число>}

Сумма состоит как минимум из одного числа, за которым может следовать произвольное (в том числе нулевое) количество знаков сложения, после каждого из которых обязательно есть число.

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

<правильная_скобочная_последовательность>::= "()" | '('<правильная скобочная последовательность>')'| <правильная скобочная последовательность>{<правильная скобочная последовательность>}
Последнее изменение: Суббота, 15 Август 2020, 02:35