Рефераты. Функциональные модели универсального нейрокомпьютера

<Имя переменной> ::= <Идентификатор>

означает, что объясняемое понятие – <Имя переменной> является идентификатором. Заметим, что порядок предложений в БНФ описания синтаксиса языка не имеет значения. Однако традиционно сложилось так, что БНФ начинают с наиболее сложных понятий.

При описании синтаксиса языка с помощью БНФ используются следующие понятия и обозначения.

Нетерминальным символом называется понятие, которое должно быть раскрыто в пределах данной БНФ. Нетерминальным символом является произвольный набор символов, заключенный в угловые скобки, например <Имя>. Нетерминальный символ раскрыт, если в пределах БНФ встретилось предложение, в котором этот нетерминальный символ стоит в левой части.

Терминальным символом называется понятие, которое не требует раскрытия. Примерами терминальных символов являются буквы, цифры и ключевые слова описываемого языка. Терминальные символы не заключаются в угловые скобки и набраны курсивом, например Имя.

Подмножеством терминальных символов является набор ключевых слов языка. Для удобства ключевые слова набраны полужирным шрифтом, например, Имя.

В прямых квадратных скобках приводятся необязательные части синтаксических конструкций. Например предложение

<Целое число> ::= [–] <Положительное целое число>

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

Набор из нескольких синтаксических конструкций, разделенных символом «½» и заключенных в прямые фигурные скобки задают конструкцию выбора одной и только одной из перечисленных в фигурных скобках конструкций. Например, предложение

<Буква> ::= { 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>. Остальные нераскрытые понятия описываются аналогично. Понятия <Идентификатор> и <Номер элемента> считаются раскрытыми ранее.

<Список формальных аргументов> ::= <Формальный аргумент> [; <Список формальных аргументов>]

<Формальный аргумент> ::= {<Формальный аргумент типа Long> ½ <Формальный аргумент типа Real> ½ <Формальный аргумент типа Integer> ½ <Формальный аргумент типа Color> ½ <Формальный аргумент типа Logic> ½ <Формальный аргумент типа String> ½ <Формальный аргумент типа PRealArray> ½ <Формальный аргумент типа PIntegerArray> ½ <Формальный аргумент типа PLongArray> ½ <Формальный аргумент типа PLogicArray> ½ <Формальный аргумент типа PString> ½ <Формальный аргумент типа Visual> ½ <Формальный аргумент типа Pointer> ½ <Формальный аргумент типа FuncType>}

<Формальный аргумент типа Long> ::= <Список имен аргументов типа Long> : Long;

<Список имен аргументов типа Long> ::= <Имя аргумента типа Long> [,<Список имен аргументов типа Long>]

<Имя аргумента типа Long> ::= <Идентификатор>

<Аргумент типа Long> ::= {<Имя аргумента типа Long> ½ <Имя аргумента типа PLongArray>^[<Номер элемента>] ½ TLong(<Имя произвольного аргумента>)}

<Имя произвольного аргумента> ::= <Имя аргумента типа Long>, <Имя аргумента типа Real>, <Имя аргумента типа Integer>, <Имя аргумента типа Color>, <Имя аргумента типа Logic>, <Имя аргумента типа String>, <Имя аргумента типа PRealArray>, <Имя аргумента типа PIntegerArray>, <Имя аргумента типа PLongArray>, <Имя аргумента типа PLogicArray>, <Имя аргумента типа PString>, <Имя аргумента типа Visual>, <Имя аргумента типа Pointer>, <Имя аргумента типа FuncType>

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

4.3.7.5.   Описание общих синтаксических конструкций

В данном разделе приведено описание общего подмножества языков описания компонентов. В некоторых случаях, когда БНФ описание понятия сложно, а неформальное описание просто и однозначно, в БНФ описание включаются фрагменты неформального описания таких понятий.

Список синтаксических конструкций общего назначения:

<Идентификатор> ::= <Буква> [<Символьная строка>]

<Буква> ::= {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 ½ 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}

<Символьная строка> ::= {<Буква> ½ <Цифра> ½ _ } [<Символьная стока>]

<Цифра> ::= {0 ½ 1 ½ 2 ½ 3 ½ 4 ½ 5 ½ 6 ½ 7 ½ 8 ½ 9}

<Число> ::= {<Целое число> ½ <Действительное число>}

<Целое число> ::= [–] <Положительное целое число>

<Положительное целое число> ::= <Цифра> [<Положительное целое число>]

<Действительное число> ::= <Целое число>[.<Положительное целое число>] [e<Целое число>]

<Целочисленная константа> ::= {<Предопределенная константа типа Integer> ½ <Предопределенная константа типа Long> ½ <Целое число>}

<Цветовая константа> ::= H <Шестнадцатеричная цифра> <Шестнадцатеричная цифра> <Шестнадцатеричная цифра> <Шестнадцатеричная цифра>

<Шестнадцатеричная цифра> ::= {0 ½ 1 ½ 2 ½ 3 ½ 4 ½ 5 ½ 6 ½ 7 ½ 8 ½ 9 ½ A ½ B ½ C ½ D ½ E ½ F }

<Строковая константа> ::= “<Строка произвольных символов>”

<Логическая константа> ::= {True ½ False}

<Строка произвольных символов> – Последовательность произвольных символов из набора ANSI. В этой последовательности допускаются символы национальных алфавитов. При необходиости включить в эту конструкцию символ кавычек, он должен быть удвоен.

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.