Е. Миркес - Учебное пособие по курсу «Нейроинформатика»
<Формальный аргумент типа 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>
Третье четвертое и пятое предложения данного фрагмента пришлось бы повторить для каждого из остальных тринадцати типов аргументов. Поскольку приведенные в книге БНФ описания языков призваны задать и объяснить синтаксис языка, а не служить исходным кодом компилятора компиляторов, автор счел возможным отступить от канонов БНФ, тем более, что для профессионала в области языков программирования не составит большого труда заменить неформальные конструкции на точные формальные фрагменты.
Описание общих синтаксических конструкцийВ данном разделе приведено описание общего подмножества языков описания компонентов. В некоторых случаях, когда БНФ описание понятия сложно, а неформальное описание просто и однозначно, в БНФ описание включаются фрагменты неформального описания таких понятий.
Список синтаксических конструкций общего назначения:
<Идентификатор>::= <Буква> [<Символьная строка>]
<Буква>::= {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. В этой последовательности допускаются символы национальных алфавитов. При необходиости включить в эту конструкцию символ кавычек, он должен быть удвоен.
<Скалярный тип>::= {Long|Real|Integer|Color|Logic|String|PRealArray|PIntegerArray|PLongArray|PLogicArray|PString|Visual|Pointer|FuncType}
<Тип массива>::= { RealArray|IntegerArray|LongArray|LogicArray}
<Константа типа Тип> — константа имеющая тип Тип.
Список синтаксических конструкций для формальных аргументов:
<Список формальных аргументов>::= <Формальный аргумент> [; <Список формальных аргументов>]
<Формальный аргумент>::= <Список имен аргументов>:<Скалярный тип>
<Список имен аргументов>::= <Имя аргумента> [,<Список имен аргументов>]
<Имя аргумента>::= <Идентификатор>
<Аргумент типа Тип> — одно из следующих понятий:
имя аргумента, который при описании формальных аргументов имел тип Тип
имя элемента аргумента-массива, если элементы массива имеют типТип
результат приведения произвольного аргумента или элемента аргумента-массива к типу Тип.
Синтаксические конструкции описания переменных:
<Описание переменных>::= Var<Список описаний однотипных переменных>
<Список описаний однотипных переменных>::= <Тип переменной> <Список переменных>; [<Список описаний однотипных переменных>]
<Список переменных>::= <Имя переменной> [, <Список переменных>]
<Имя переменной>::= <Идентификатор>
<Тип переменной>::= {<Скалярный тип> | <Тип массива>[ <Целочисленноеконстантное выражение>] }
<Переменная типа Тип> — одно из следующих понятий:
имя переменной, которая при описании переменных имела тип Тип
имя элемента массива, если элементы массива имеют типТип
результат приведения произвольной переменной или элемента массива к типу Тип.
Синтаксическая конструкция описания глобальных переменных (доступна только в языках описания компонентов учитель и контрастер):
<Описание глобальных переменных>::= Global<Список описаний однотипных переменных>
Синтаксические конструкции описания статических переменных
Статические переменные, как правило, служат для описания параметров компонентов нейрокомпьютера. Использование в именах переменных только символов латинского алфавита и цифр делает идентификаторы универсальными, но неудобными для всех пользователей, кроме англо-говорящих. Для удобства всех остальных пользователей в описании статических переменных предусмотрена возможность использовать дополнительные имена для статических переменных. Однако эти имена служат только для построения интерфейса и не могут быть использованы в описании тела соответствующего компонента. Кроме того, статической переменной можно при описании задать значение по умолчанию.
<Описание статических переменных>::= Static <Список описаний статических переменных>
<Список описаний статических переменных>::= <Описание статической переменной>; [<Список описаний статических переменных>]
<Описание статической переменной>::= <Тип переменной> <Имя переменной> [Name <Имя статической переменной>] [Default <Значение по умолчанию>]
<Имя статической переменной>::= <Строковая константа>
<Значение по умолчанию>::= <Константное выражение типа <Тип переменной>>
Синтаксические конструкции описания функций
<Описание функций>::= <Описание функции> [<Описание функций>]
<Описание функции>::= <Заголовок функции> <Описание переменных> <Описание меток> <Тело функции>
<Заголовок функции>::= Function<Имя функции>[( <Список формальных аргументов>)]: <Скалярный тип>;
<Описание меток>::= Label<Список меток>;
<Список меток>::= <Имя метки> [, <Список меток>]
<Имя метки>::= <Идентификатор>
<Тело функции>::= Begin<Составной оператор> End;