Способ описания синтаксических конструкций
Для описания синтаксиса языков описаний компонентов используется расширенная Бэкусова нормальная форма. Описание синтаксиса языка с помощью БНФ состоит в расшифровке понятий от более сложных к более простым. Каждое предложение БНФ состоит из двух частей, разделенных символами «::=» (два двоеточия, за которыми следует знак равенства). Наиболее подходящим названием для этого разделителя является слово «является» в отличие от «равно» или «присвоить» в языках программирования. Слева от разделителя находится объясняемое понятие, справа — конструкция разъясняющая это понятие. Например, предложение
<���Имя переменной>::= <���Идентификатор>
означает, что объясняемое понятие — <���Имя переменной> является идентификатором. Заметим, что порядок предложений в БНФ описания синтаксиса языка не имеет значения. Однако традиционно сложилось так, что БНФ начинают с наиболее сложных понятий.
При описании синтаксиса языка с помощью БНФ используются следующие понятия и обозначения.
Нетерминальным символом называется понятие, которое должно быть раскрыто в пределах данной БНФ. Нетерминальным символом является произвольный набор символов, заключенный в угловые скобки, например <���Имя>. Нетерминальный символ раскрыт, если в пределах БНФ встретилось предложение, в котором этот нетерминальный символ стоит в левой части.
Терминальным символом называется понятие, которое не требует раскрытия. Примерами терминальных символов являются буквы, цифры и ключевые слова описываемого языка. Терминальные символы не заключаются в угловые скобки и набраны курсивом, например Имя.
Подмножеством терминальных символов является набор ключевых слов языка. Для удобства ключевые слова набраны полужирным шрифтом, например, Имя.
В прямых квадратных скобках приводятся необязательные части синтаксических конструкций. Например предложение
<���Целое число>::= [—] <���Положительное целое число>
означает, что целым числом является положительное целое число (знак минус, стоящий в квадратных скобках, опущен как необязательный) или положительное целое число, перед которым стоит знак минус (знак минус, стоящий в квадратных скобках, задействован). Отметим, что квадратные скобки, набранные курсивом, являются терминальными символами.
Набор из нескольких синтаксических конструкций, разделенных символом «|» и заключенных в прямые фигурные скобки задают конструкцию выбора одной и только одной из перечисленных в фигурных скобках конструкций. Например, предложение
<���Буква>::= { A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z }
означает, что понятие буква является одной из заглавных букв латинского алфавита. Отметим, что фигурные скобки, набранные курсивом, являются терминальными символами.
В целях сокращения описания в тех случаях, когда БНФ описание понятия сложно, а неформальное описание просто и однозначно, в БНФ описание включаются фрагменты неформального описания таких понятий.
Кроме того в данную модификацию БНФ включены нетерминальные символы с параметрами. В теле нетерминального символа параметры набраны полужирным курсивом. В качестве примера приведем набор предложений, описывающих формальные аргументы:
<���Список формальных аргументов>::= <���Формальный аргумент> [; <���Список формальных аргументов>]
<���Формальный аргумент>::= <���Список имен аргументов>:<���Скалярный тип>
<���Список имен аргументов>::= <���Имя аргумента> [,<���Список имен аргументов>]
<���Имя аргумента>::= <���Идентификатор>
<���Аргумент типа Тип > — одно из следующих понятий:
имя аргумента, который при описании формальных аргументов имел тип Тип
имя элемента аргумента-массива, если элементы массива имеют тип Тип
результат приведения произвольного аргумента или элемента аргумента-массива к типу Тип.
В этом фрагменте содержится предложение, раскрывающее понятие <���Аргумент типа Тип >, являющееся нетерминальным символом с параметром. Из последнего предложения легко понять, что представляет собой понятие <���Аргумент типа Тип >. Для описания этого понятия в соответствии с требованиями стандартной БНФ пришлось бы описывать отдельно следующие понятия: <���Аргумент типа long>, <���Аргумент типа real>, <���Аргумент типа integer>, <���Аргумент типа color>, <���Аргумент типа logic>, <���Аргумент типа string>, <���Аргумент типа prealarray>, <���Аргумент типа pintegerarray>, <���Аргумент типа plongarray>, <���Аргумент типа plogicarray>, <���Аргумент типа pstring>, <���Аргумент типа visual>, <���Аргумент типа pointer>, <���Аргумент типа functype>. Кроме того, пришлось бы отказаться от простой и понятной конструкции описания формальных аргументов. Ниже приведена часть конструкции описания формальных аргументов, которую пришлось бы включить в БНФ. В данном фрагменте приведена расшифровка только одного понятия — <���Аргумент типа long>. Остальные нераскрытые понятия описываются аналогично. Понятия <���Идентификатор> и <���Номер элемента> считаются раскрытыми ранее.
Читать дальше