Описание грамматики LSP

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

Формальное описание синтаксиса LSP-языка в виде БНФ (Бэкуса-Наура форма) приведено ниже. В БНФ описании названия нетерминальных символов заключены в угловые скобки, имена терминалов написаны большими буквами. Кроме того, простые терминалы, ключевые слова и разделители, записаны в одинарных кавычках. В БНФ-описании используются следующие терминалы: ИДЕНТ, СТРОКА, DOTDOT, ЦЕЛОЕ32, ДАТА, ВРЕМЯ, IP.

<cfg_data>::= <top_level_form> | <cfg_data> <top_level_form>

<top_level_form>::= <object_def> | <constant>

<constant>::= `const` <key_value>

<object_def>::= ИДЕНТ ИДЕНТ `(` <key_value_or_template_list> `)`

                          | ИДЕНТ `(` <key_value_or_template_list> `)`

<key_value_list>::= <key_value> | <key_value> <key_value_list>

<key_value_or_template_list>::= <key_value_or_template_list>

                          |<key_value_or_template> <key_value_or_template_list> <key_value_or_template>::= key_value | template

<key_value>::= <l_value> `=` <r_value_list>

<r_value_list>::= <r_value> | <r_value_list> `,` <r_value>

<r_value>::= ИДЕНТ | ИДЕНТ `<` `>`

                          | ИДЕНТ `<` <key_value_or_template_list> `>`

                          | ИДЕНТ `[` <r_value_list> `]`

                          | `(` <r_value_list> `)` | `(` `)`

                          | `[` <r_value_list> `]` | `[` `]`

                          | ИДЕНТ `(` <key_value_or_template_list> `)`

                          | СТРОКА

                          | ЦЕЛОЕ32 | ЦЕЛОЕ32 `..` ЦЕЛОЕ32

                          | ЦЕЛОЕ32 `/` ЦЕЛОЕ32 `/` ЦЕЛОЕ32

                          | - ЦЕЛОЕ32

                          | IP | IP `..` IP | IP `/` ЦЕЛОЕ32

                          | ДАТА

                          | ВРЕМЯ

<l_value>::= ИДЕНТ | ИДЕНТ `*`

<template>::= `+` ИДЕНТ