Расширенная форма Бэкуса — Наура(РБНФ)

Расширенная форма Бэкуса — Наура(РБНФ) — это тип формального синтаксиса, используемый для описания структуры языка программирования или другого формального языка. Это расширение формы Бэкуса — Наура(БНФ), которая была первоначально разработана Джоном Бэкусом и Питером Науром для описания синтаксиса языка программирования Алгол.

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

В PlantUML была введена базовая поддержка РБНФ.

[Ref. QA-16529]
WARNING
 This translation need to be updated. 
WARNING

Минимальная диаграмма двоичных цифр

Все элементы EBNF

Элементы EBNF, обрабатываемые PlantUML, описаны ниже.

Использование специальной последовательности с special-sequence-symbol "?"

Можно использовать специальную последовательность при помощи special-sequence-symbol "?".

[Ref. QA-16781]

Комплексное использование повторений с repetition-symbol "*"

Можно указать количество повторений при помощи repetition-symbol "*".

[Ref. QA-16750]

Режим рисования

До версии V1.2025.1 можно было выбрать режим рисования и использовать компактный режим с помощью команды !pragma compact.

Развернутый режим (по умолчанию)

Компактный режим

[Ref. QA-16692, QA-16529]

[End of the compacted mode: GH-1585]

Заметки к элементам

К элементам диаграммы можно добавлять примечания с помощью тегов комментариев РБНФ.

Использование (глобального) стиля

Без стиля (по умолчанию)

Со стилем

Для изменения отрисовки элементов можно использовать style.

[Ref. QA-16529]

Пример грамматики LISP

Грамматика LISP с использованием PlantUML.

[Ref. ]

РБНФ грамматики PlantUML РБНФ

РБНФ позволяет сделать описание себя, так что вот оно!

Спецификация языка Java

Реальный пример детально описанного языка программирования.

Пакеты и модули

Лексическая структура

Типы, значения и переменные

Имена

Классы

Интерфейсы

Массивы

Блоки, утверждения и шаблоны

WARNING
 This translation need to be updated. 
WARNING

Оставшиеся дефекты

Could you put 'arrow head' on all rerouted lines?

Fixed by EBNF more arrow head on V1.2024.8

Order issue

[Ref. QA-17090, fixed by EBNF concatenation order on V1.2024.8]

Allow accentuated or Unicode char on EBNF meta-identifier or rule name.

[Ref. QA-17145 , fixed by EBNF better unicode support on V1.2024.8]

Allow full restriction management with except-symbol "-"

[Ref. QA-16735]