Описание грамматики 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>::= ‘+’ ИДЕНТ