|
|
@@ -0,0 +1,72 @@
|
|
|
+# Нотация НШ
|
|
|
+
|
|
|
+Эта нотация является современным вариантом расширенной формы Бэкуса—Наура (`РБНФ`).
|
|
|
+
|
|
|
+Для описания грамматики языка используется несколько простых правил.
|
|
|
+
|
|
|
+## Определение продукции
|
|
|
+
|
|
|
+Ключевым понятием является `продукция`.
|
|
|
+
|
|
|
+При определении `продукции` слева устанавливается имя `продукции`, справа от знака `присвоить` описывается определение продукции. Предложение завершается `терминальный символом` -- `;`. Пример ниже:
|
|
|
+
|
|
|
+> Имя = Буква;
|
|
|
+
|
|
|
+## Необязательность символа в продукции
|
|
|
+
|
|
|
+При определении имени продукции символ (символы) с правой стороны могут быть необязательными.
|
|
|
+
|
|
|
+> Объект = Тип?;
|
|
|
+
|
|
|
+
|
|
|
+## Один или больше символов в продукции
|
|
|
+
|
|
|
+Если для определения имени продукции необходимо указать слева один или больше символов -- используется нотация имени символа с двоеточием после имени символа.
|
|
|
+
|
|
|
+> Объект = Тип..;
|
|
|
+
|
|
|
+## Символы на выбор в продукции
|
|
|
+
|
|
|
+Бывает, что продуция можэет быть одним из нескольких допустимых символов. Форма записи представлена ниже:
|
|
|
+
|
|
|
+> Объект = Тип1 | Тип2 | Тип3;
|
|
|
+
|
|
|
+## Комбинация обязательных и необязательных символов
|
|
|
+
|
|
|
+Для обозначения того, что для продукции используется один обязательный и список необязательные символы следует использовать литеру `,`. Форма записи:
|
|
|
+
|
|
|
+> Объект = Тип0, Типы..?
|
|
|
+
|
|
|
+## Комбинация символов и литер
|
|
|
+
|
|
|
+Для показа спосба комбинации продукции из символов и литер следует использовать литеру `+`:
|
|
|
+
|
|
|
+> ТипПоле = Тип0 + "." + Имя;
|
|
|
+
|
|
|
+## Комментарии
|
|
|
+
|
|
|
+В определение продукции можно добавить комментарий.
|
|
|
+
|
|
|
+> ТипПоле = Тип0 + "." + Имя; // Определение поля в типе
|
|
|
+
|
|
|
+## Определение категории продукции
|
|
|
+
|
|
|
+К таким элементам, например, относятся кючевые символы
|
|
|
+
|
|
|
+```bash
|
|
|
+МОДУЛЬ = "МОДУЛЬ";
|
|
|
+ФУНКЦИЯ = "ФН";
|
|
|
+КлючевойСимвол = МОДУЛЬ | ФУНКЦИЯ;
|
|
|
+```
|
|
|
+
|
|
|
+## Обозначение области определения
|
|
|
+
|
|
|
+Бывает полезно в продукции показать границы определения, например:
|
|
|
+
|
|
|
+```bash
|
|
|
+Модуль = МОДУЛЬ Имя;
|
|
|
+Импорт?, Типы?, Переменные?, Функции?;
|
|
|
+{
|
|
|
+ Выражение..?
|
|
|
+}
|
|
|
+```
|