новости  материалы  справочник  форум  гостевая  ссылки Поиск с Яндексом  
Новости
Материалы
  Логические подходы
  Нейронные сети
  Генетические алгоритмы
  Разное
  Публикации
  Алгоритмы
  Применение
Справочник
Форум
Гостевая книга
Ссылки
О сайте
 
Programming Game AI by Example  Programming Game AI by Example
500 стр., 2004 г.
Цена: 1881 руб.
 
Хостинг от компании Parking.ru

2. Общий стандарт

Эта глава посвящена описанию элементов стандарта, общих для всех компонентов нейрокомпьютера.

2.1 Стандарт типов данных

При описании запросов, структур данных, стандартов компонентов нейрокомпьютера необходимо использовать набор первичных типов данных. Поскольку в разных языках программирования типы данных называются по-разному, введем единый набор обозначений для них.

Таблица 1.

Типы данных для всех компонентов нейрокомпьютера

Тип Длина Значения Описание
Real 4 байта от 1.5 e- 45
до 3.4 e 38

Действительное число. Величина из указанного диапазона. Знак произвольный. В дальнейшем называется «действительное».

Integer 2 байта от -32768
до 32767

Целое число из указанного диапазона. В дальнейшем называется «целое».

Long 4 байта от -2147483648
до 2147483647

Целое число из указанного диапазона. В дальнейшем называется «длинное целое».

RealArray 4*N байт  

Массив действительных чисел.

PRealArray 4 байта  

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

IntegerArray 2*N байт   Массив целых чисел.
PIntegerArray 4 байта  

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

LongArray 4*N байт   Массив длинных целых чисел.
PLongArray 4 байта  

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

Logic 1 байт True, False Логическая величина. Далее называется «логическая».
LogicArray N байт   Массив логических переменных.
PLogicArray 4 байта  

Используется для передачи массивов между компонентами. Имеет значение адреса массива логических переменных.

Color 2 байта  

Используется для задания цветов. Является совокупностью из 16 элементарных (битовых) флагов. См. раздел «Цвет операции с цветами».

FuncType 4 байта  

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

String 256 байт   Строка символов.
PString 4 байта  

Адрес строки символов. Служит для передачи строк в запросах

Visual 4 байта  

Отображаемый элемент. Служит для адресации отображаемых элементов в интерфейсных функциях. Тип значений зависит от реализации библиотеки интерфейсных функций и не может изменяться пользователем иначе, чем через вызов интерфейсной функции.

Pointer 4 байта  

Не типизованный указатель (адрес). Этот тип совместим с любым типизованным указателям.

Числовые типы данных Integer, Long и Real предназначены для хранения различных чисел. Переменные числовых типов допускаются в языках описания всех компонентов нейрокомпьютера. При необходимости записать в один массив числовые переменные различного типа следует использовать функции приведения типов, описанные в разделе «Приведение типов»

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

Указатель на строку. При передаче данных между компонентами сети и процедурами в пределах одного компонента удобно вместо строки передавать указатель на строку, поскольку указатель занимает всего четыре байта. Для этой цели служит тип указатель на строку.

Логический тип используется для хранения логических значений. Значение истина задается предопределенной константой True, значение ложь – False.

Массивы. В данном стандарте предусмотрены массивы четырех типов – логических, целочисленных, длинных целых и действительных переменных. Длины массивов определяются при описании, но все массивы переменных одного типа относятся к одному типу, в отличие от языков типа Паскаль. Использование функций приведения и преобразования типов позволяют получать из этих массивов структуры произвольной сложности. Элементы массивов всегда нумеруются с единицы.

Вне зависимости от типа массива нулевой элемент массива имеет тип Long и содержит длину массива в элементах. На рис. 1 приведена схема распределения памяти всех типов массивов, каждый из которых содержит шесть элементов.

Все массивы, как правило, используется только в пределах одного компонента. При передаче массивов между компонентами или между процедурами в пределах одного компонента используются указатели на массивы.

Адрес функции. Этот тип используется для передачи функции в качестве аргумента. Переменная типа FuncType занимает четыре байта и является адресом функции. В зависимости от реализации по этому адресу может лежать либо начало машинного кода функции, либо начало текста функции. В случае передачи текста функции первые восемь байт по переданному адресу содержат слово «Function».

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

2.2 Переменные типа цвет и операции с цветами

Использование цветов позволяет гибко разбивать множества на подмножества. В нейрокомпьютере возникает необходимость в разбиении на подмножества (раскрашивании) задачника. В этом разделе описывается стандарт работы с переменными типа цвет.

2.2.1 Значение переменной типа цвет (Color)

Таблица 2

Нумерация флагов (бит) переменной типа Color

Номер Шестнадцати-ричная запись Десятичная запись Двоичная запись
0 H0001 1 B.0000.0000.0000.0001
1 H0002 2 B.0000.0000.0000.0010
2 H0004 4 B.0000.0000.0000.0100
3 H0008 8 B.0000.0000.0000.1000
4 H0010 16 B.0000.0000.0001.0000
5 H0020 32 B.0000.0000.0010.0000
6 H0040 64 B.0000.0000.0100.0000
7 H0080 128 B.0000.0000.1000.0000
8 H0100 256 B.0000.0001.0000.0000
9 H0200 512 B.0000.0010.0000.0000
10 H0400 1024 B.0000.0100.0000.0000
11 H0800 2048 B.0000.1000.0000.0000
12 H1000 4096 B.0001.0000.0000.0000
13 H2000 8192 B.0010.0000.0000.0000
14 H4000 16384 B.0100.0000.0000.0000
15 H8000 32768 B.1000.0000.0000.0000

Переменная типа цвет представляет собой двухбайтовое беззнаковое целое. Однако основное использование предполагает работу не как с целым числом, а как с совокупностью однобитных флагов. При записи на диск используется символьное представление двоичной записи числа с ведущими нулями и разбиением на четверки символом «.» (точка), предваряемая заглавной буквой «B» латинского алфавита, или символьное представление шестнадцатеричной записи числа с ведущими нулями, предваряемая заглавной буквой «H» латинского алфавита. В таблице 2 приведена нумерация флагов (бит) переменной типа Color, их шестнадцатеричное, десятичное и двоичное значение. При использовании в учителе или других компонентах может возникнуть необходимость в присвоении некоторым из флагов или их комбинаций имен. На такое именование не накладывается никаких ограничений, хотя возможно будет выработан стандарт и на названия часто используемых цветов (масок, совокупностей флагов).

2.2.2 Операции с переменными типа цвет (Color)

Таблица 3

Предопределенные константы операций с переменными типа Цвет (Color)

Код Обозначение Вычисляемое выражение Тип результата Пояснение
1 CEqual A = B Logic Полное совпадение.
2 CIn A And B = A Logic A содержится в В.
3 CInclude A And B = B Logic А содержит В.
4 CExclude A And B = 0 Logic A и В взаимоисключающие.
5 CIntersect A And B <> 0 Logic А и В пересекаются.
6 COr A Or B Сolor Побитное включающее ИЛИ.
7 CAnd A And B Color Побитное И.
8 CXor A Xor B Color Побитное исключающее ИЛИ
9 CNot Not A Color Побитное отрицание

В табл. 3 приведены операции с переменными типа Color. Первые пять операций могут использоваться только для сравнения переменных типа Color, а остальные четыре операции – для вычисления выражений типа Color.

В ряде запросов необходимо указать тип операции над цветом. Для передачи таких параметров используется переменная типа Integer. В качестве значений передается содержимое соответствующей ячейки столбца код табл. 3.

2.3 Приведение и преобразование типов

Есть два пути использовать переменную одного типа как переменную другого типа. Первый путь состоит в преобразовании значения к заданному типу. Так, для преобразования целочисленной переменной к действительному типу, достаточно просто присвоить переменной действительного типа целочисленное значение. С обратным преобразованием сложнее, поскольку не ясно что делать с дробной частью. В табл. 4 приведены все типы, которые можно преобразовать присваиванием переменной другого типа. В табл. 5 приведены все функции преобразования типов.

Таблица 4

Преобразование типов прямым присваиванием

Тип переменной, которой производится присваивание Тип выражения, которое может быть присвоено Пояснение
Real Real, Integer, Long Значение преобразуется к плавающему виду. При преобразовании значения выражения типа Long возможна потеря точности.
Long Integer, Long При преобразовании типа Integer, действуют следующие правила. Значение переменной помещается в два младших байта. Если значение выражения больше либо равно нолю, то старшие байты равны H0000, в противном случае старшие байты равны HFFFF.
Integer Integer, Long При преобразовании выражения типа Long значение двух старших байт отбрасывается.

При вычислении числовых выражений действуют следующие правила преобразования типов:

  1. Выражения вычисляются слева на право.
  2. Если два операнда имеют один тип, то результат имеет тот же тип.
  3. Если аргументы имеют разные типы, то выражение имеет старший из двух типов. Список числовых типов по убыванию старшинства: Real, Long, Integer.
  4. Результат операции деления действительных чисел (операция «/») всегда имеет тип Real, вне зависимости от типов аргументов.

Таблица 5

Функции преобразования типов

Имя функции Тип аргумента Тип результата Описание
Real Real, Integer, Long Real Аналогично прямому присваиванию
Integer Integer, Long Integer Аналогично прямому присваиванию
Long Integer, Long Long Аналогично прямому присваиванию
Str Real, Integer, Long String Представляет числовой аргумент в виде символьной строки в десятичном виде
Round Real Long Округляет действительное значение до ближайшего длинного целого. Если значение действительного выражения выходит за диапазон длинного целого, то результат равен нулю.
Truncate Real Long Преобразует действительное значение в длинное целое путем отбрасывания дробной части. Если значение действительного выражения выходит за диапазон длинного целого, то результат равен нулю.
LVal String Long Преобразует длинное целое из символьного представления во внутреннее.
RVal String Real Преобразует действительное число з символьного представления во внутреннее.
StrColor Color String Преобразует внутреннее представление переменной типа Color в соответствии с разд. «Значение переменной типа цвет»
ValColor String Color Преобразует символьное представление переменной типа Color во внутреннее.
Color Integer Color Интерпретирует целое число как значение типа Color.

В отличие от преобразования типов приведение типов позволяет по-разному интерпретировать одну область памяти. Функция приведения типа применима только к переменным или элементам массива (преобразование типов применимо и к выражениям). Рекомендуется использовать приведение типов только для типов, имеющих одинаковую длину. Например, Integer и Color или Real и Long. Список функций приведения типов приведен в табл. 6.

Следующие примеры иллюстрируют использование преобразования и приведения типов:

При вычислении следующих четырех выражений, получаются различные результаты

4096*4096=0

Таблица 6

Функции приведения типов

Название Тип результата Описание
TReal Real Четыре байта, адресуемые приводимой переменной, интерпретируются как действительное число.
TInteger Integer Два байта, адресуемые приводимой переменной, интерпретируются как целое число.
TLong Long Четыре байта, адресуемые приводимой переменной, интерпретируются как длинное целое.
TRealArray RealArray Область памяти, адресуемая приводимой переменной, интерпретируются как массив действительных чисел.
TPRealArray PRealArray Четыре байта, адресуемые приводимой переменной, интерпретируются как указатель на массив действительных чисел.
TIntegerArray IntegerArray Область памяти, адресуемая приводимой переменной, интерпретируются как массив целых чисел.
TPIntegerArray PIntegerArray Четыре байта, адресуемые приводимой переменной, интерпретируются как указатель на массив целых чисел.
TLongArray LongArray Область памяти, адресуемая приводимой переменной, интерпретируются как массив длинных целых.
TPLongArray PLongArray Четыре байта, адресуемые приводимой переменной, интерпретируются как указатель на массив длинных целых.
TLogic Logic Адресуемый приводимой переменной байт интерпретируются как логическая переменная.
TLogicArray LogicArray Область памяти, адресуемая приводимой переменной, интерпретируются как массив логических переменных.
TPLogicArray LogicArray Четыре байта, адресуемые приводимой переменной, интерпретируются как указатель на массив логических переменных.
TColor Color Два байта, адресуемые приводимой переменной, интерпретируются как переменная типа цвет.
TFuncType FuncType Четыре байта, адресуемые приводимой переменной, интерпретируются как адрес функции.
TString String 256 бай области памяти, адресуемой приводимой переменной, интерпретируются как строка символов.
TPString PString Четыре байта, адресуемые приводимой переменной, интерпретируются как указатель на строку символов.
TVisual Visual Четыре байта, адресуемые приводимой переменной, интерпретируются как отображаемый элемент.
TPointer Pointer Четыре байта, адресуемые приводимой переменной, интерпретируются как адрес.

Поскольку константа 4096 имеет тип Integer, а 4096*4096=16777216=256*65536 , то есть младшие два байта результата равны нулю.

Long(4096*4096)=0

Поскольку оба сомножителя имеет тип Integer, то и выражение имеет тип Integer. Следовательно, результат умножения равен нулю, который затем преобразуется к типу Long.

Long(4096)*4096=16777216

Поскольку первый сомножитель имеет тип длинное целое, то и выражение имеет тип длинное целое.

4096.0*4096=1.677722E+7

Поскольку первый сомножитель имеет тип Real, то и выражение имеет тип Real. Из-за недостатка точности произошла потеря точности в седьмом знаке.

В следующем примере, используя приведение типов, в массив действительных чисел A размером в 66 элементов складываются: действительное число в первый элемент массива; длинное целое во второй элемент массива и символьную строку в элементы с 3 по 66.

A[1]= 1.677722E+7

TLong(A[2])= 16777216

TString(A[3])=‘Пример приведения типов’

Необходимо отметить, что элементы массива A, начиная со второго, после выполнения приведенного выше фрагмента программы не рекомендуется использовать как действительные числа, поскольку элемент A[2] содержит значение 2.350988Е-38, а элемент A[5] – значение -4.577438Е-18. Значение элементов, начиная с A[8] (символьная строка ‘Пример приведения типов’ содержит 23 символа и занимает 24 байта, то есть шесть элементов массива) вообще не зависят от приведенного фрагмента программы и содержат «мусор», который там находился ранее.

В списке типов определены только одномерные массивы. Однако, при необходимости, возможно использование двумерных массивов. Для этого в одномерный массив A необходимо поместить указатели на одномерные массивы. При этом I,J-й элемент двумерного массива записывается в виде:

TPRealArray(A[I])^[J]

В этом примере использована функция приведения типов TPRealArray, указывающая, что I-й элемент массива A нужно интерпретировать как указатель на одномерный массив действительных чисел, и операция «^» указывающая, что вместо указателя на массив TPRealArray(A[I]) используется массив, на который он указывает.

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

2.4 Операции

В данном разделе приведены все операции, которые могут быть использованы при построении выражений различного типа. В табл. 7 приведены операции, которые допустимы в целочисленных выражениях (выражениях типа Integer или Long). В табл. 8 – список, дополняющий список операций из табл. 7 до полного списка операций, допустимых в выражениях действительного типа. В табл. 9 – операции, допустимые при построении логических выражений. В табл. 10 –для выражений типа символьная строка. В табл. 3 – для выражений типа Color.

Таблица 7

Операции, допустимые в целочисленных выражениях

Уровень приоритета Обозначение Тип 1-го операнда Тип 2-го операнда Тип результата Название операции
1 * Integer Integer Integer Умножение
1 * Long Integer Long Умножение
1 * Integer Long Long Умножение
1 * Long Long Long Умножение
1 Div Integer Integer Integer Целочисленное деление
1 Div Integer Long Long Целочисленное деление
1 Div Long Integer Long Целочисленное деление
1 Div Long Long Long Целочисленное деление
1 Mod Integer Integer Integer Остаток от деления
1 Mod Long Integer Long Остаток от деления
1 Mod Integer Long Long Остаток от деления
1 Mod Long Long Long Остаток от деления
2 + Integer Integer Integer Сложение
2 + Integer Long Long Сложение
2 + Long Integer Long Сложение
2 + Long Long Long Сложение
2 Integer Integer Integer Вычитание
2 Integer Long Long Вычитание
2 Long Integer Long Вычитание
2 Long Long Long Вычитание
3 And Integer Integer Integer Побитное И
3 And Long Long Long Побитное И
3 Or Integer Integer Integer Побитное включающее ИЛИ
3 Or Long Long Long Побитное включающее ИЛИ
3 Xor Integer Integer Integer Побитное исключающее ИЛИ
3 Xor Long Long Long Побитное исключающее ИЛИ
3 Not Integer Integer Integer Побитное отрицание
3 Not Long Long Long Побитное отрицание

Таблица 8

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

Уровень приоритета Обозначение Тип 1-го операнда Тип 2-го операнда Тип результата Название операции
1 * Real Integer, Real, Long Real Умножение
1 / Integer, Real, Long Integer, Real, Long Real Деление
1 RMod Integer, Real, Long Integer, Real, Long Real Остаток от деления
2 + Real Integer, Real, Long Real Сложение
2 Real Integer, Real, Long Real Вычитание

Таблица 9

Операции, допустимые при построении логических выражений

Уровень приоритета Обозначение Тип 1-го операнда Тип 2-го операнда Тип результата Название операции
1 > Integer, Real, Long Integer, Real, Long Logic Больше
1 < Integer, Real, Long Integer, Real, Long Logic Меньше
1 >= Integer, Real, Long Integer, Real, Long Logic Больше или равно
1 <= Integer, Real, Long Integer, Real, Long Logic Меньше или равно
1 = Integer, Real, Long Integer, Real, Long Logic Равно
1 <> Integer, Real, Long Integer, Real, Long Logic Не равно
2 And Logic Logic Logic Логическое И
2 Or Logic Logic Logic Логическое включающее ИЛИ
2 Xor Logic Logic Logic Логическое исключающее ИЛИ
2 Not Logic Logic Logic Логическое отрицание

Таблица 10

Операции для выражений типа символьная строка

Уровень приоритета Обозначение Тип 1-го операнда Тип 2-го операнда Тип результата Название операции
1 + String String String Конкатенация (сцепка) строк.

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

В табл. 8 приводится необычная операция RMod – остаток от деления действительных чисел. Результат этой функции равен разности между первым операндом и вторым операндом, умноженным на целую часть отношения первого операнда ко второму.

Кроме операций, приведенных в табл. 3 и табл. 7–10, определены две взаимно обратные операции для работы с адресами и указателями:

  • ^ – ставится после переменной типа указатель. Означает, что вместо указателя в выражении используется переменная или массив, на который указывает этот указатель. Не допускается после переменных типа Pointer.
  • @ – ставится перед именем переменной любого типа. Означает, что в выражении участвует не переменная, а адрес переменной. Используется при присвоении адресов переменных или массивов переменным типа указатель.

2.5 Предопределенные константы

При описании различных компонентов возникает необходимость в использовании некоторого набора стандартизированных констант. Стандартность набора констант особенно необходима при обмене между компонентами. Все константы, приведенные в табл. 11, описываются в тех разделах, где они используются. В табл. 11 для каждой константы указывается ее тип, значение и названия разделов, в которых она описывается.

Таблица 11

Предопределенные константы

Идентификатор Тип Значение Раздел
Шестнад. Десятич.
BackInSignals Integer H0005 5 Запросы к компоненту сеть
BackOutSignals Integer H0006 6 Запросы к компоненту сеть
BackParameters Integer H0007 7 Запросы к компоненту сеть
Binary Integer H0001 1 Запросы компонента интерпретатор ответа
BinaryPrep Integer H0000 0 Запросы компонента предобработчик
BynaryCoded Integer H0003 3 Запросы компонента интерпретатор ответа
CAnd Integer H0007 7 Операции с переменными типа цвет (Color)
Cascad Integer H0002 2 Запросы к компоненту сеть
CEqual Integer H0001 1 Операции с переменными типа цвет (Color)
CExclude Integer H0004 4 Операции с переменными типа цвет (Color)
CicleFor Integer H0003 3 Запросы к компоненту сеть
CicleUntil Integer H0004 4 Запросы к компоненту сеть
CIn Integer H0002 2 Операции с переменными типа цвет (Color)
CInclude Integer H0003 3 Операции с переменными типа цвет (Color)
CIntersect Integer H0005 5 Операции с переменными типа цвет (Color)
CNot Integer H0009 9 Операции с переменными типа цвет (Color)
COr Integer H0006 6 Операции с переменными типа цвет (Color)
CXor Integer H0008 8 Операции с переменными типа цвет (Color)
Element Integer H0000 0 Запросы к компоненту сеть
Empty Integer H0000 0 Запросы компонента интерпретатор ответа
EmptyPrep Integer H0003 3 Запросы компонента предобработчик
False Logic H00    
FuncPrep Integer H0005 5 Запросы компонента предобработчик
InSignalMask Integer H0003 3 Запросы к компоненту сеть
InSignals Integer H0000 0 Запросы к компоненту сеть
Layer Integer H0001 1 Запросы к компоненту сеть
MainVisual Visible     Интерфейсные функции
Major Integer H0002 2 Запросы компонента интерпретатор ответа
mIntegerArray Integer H0002 2 Функции управления памятью
mLogicArray Integer H0001 1 Функции управления памятью
mLongArray Integer H0004 4 Функции управления памятью
ModPrep Integer H0004 4 Запросы компонента предобработчик
mRealArray Integer H0004 4 Функции управления памятью
Null Pointer H00000000 нет  
Ordered Integer H0002 2 Запросы компонента предобработчик
OutSignals Integer H0001 1 Запросы к компоненту сеть
Parameters Integer H0002 2 Запросы к компоненту сеть
ParamMask Integer H0004 4 Запросы к компоненту сеть
PositPrep Integer H0006 6 Запросы компонента предобработчик
tbAnswers Integer H0004 4 Язык описания задачника
tbCalcAnswers Integer H0006 6 Язык описания задачника
tbCalcReliability Integer H0007 7 Язык описания задачника
tbColor Integer H0001 1 Язык описания задачника
tbComment Integer H000A 10 Язык описания задачника
tbEstimation Integer H0009 9 Язык описания задачника
tbInput Integer H0002 2 Язык описания задачника
tbPrepared Integer H0003 3 Язык описания задачника
tbReliability Integer H0005 5 Язык описания задачника
tbWeight Integer H0008 8 Язык описания задачника
True Logic HFF 255 (-1)  
UnknownLong Integer H0000 0 Неопределенные значения
UnknownReal Real нет 1E-40 Неопределенные значения
UnOrdered Integer H0001 1 Запросы компонента предобработчик
UserType Integer HFFFF -1 Структурная единица, определенная пользователем.

Три предопределенные константы, приведенные в табл.11, не описываются ни в одном разделе данной книги. Это константы общего пользования. Их значение:

True – значение истина для присваивания переменным логического типа.

False – значение ложь для присваивания переменным логического типа.

Null – пустой указатель. Используется для сравнения или присваивания переменных всех типов указателей.

2.6 Интерфейсные функции

Часто при обучении и тестировании нейронных сетей возникает необходимость отображать на экран некоторую информацию. Например, число предъявлений примеров сети, максимальную оценку и т.п. Вряд ли разумно использовать язык описания компонентов нейрокомпьютера для описания интерфейса. Это противоречит требованию переносимости текста описания компонентов между разными платформами и операционными системами. Для облегчения создания интерфейса, с одной стороны, и обеспечения универсальности описания компонентов нейрокомпьютера, с другой, предложен набор интерфейсных функций. Поддержку этих функций несложно организовать в любой операционной среде и на любой платформе.

В основу набора интерфейсных функций положен принцип объектно-ориентированной машины потока событий. Примером таких систем может служить инструментальная библиотека объектов (классов) Turbo Vision фирмы Борланд, или оконный интерфейс Windows фирмы Майкрософт. Предлагаемый в данном разделе набор интерфейсных функций беднее любой из выше названных интерфейсных библиотек, но позволяет организовать достаточно красивый и удобный интерфейс.

2.6.1 Структура данных интерфейсных функций

Элементом данных в структуре интерфейса является отображаемый элемент. Каждый отображаемый элемент имеет свои координаты относительно начала владельца – отображаемого элемента, содержащего данный. Владельцем отображаемого элемента может являться одно из окон или диалогов или главный элемент. Главный отображаемый элемент является предопределенным и обозначается переменной MainVisual. В программах компонентов нейрокомпьютера не допускается изменение значения переменной MainVisual. Эту переменную стоит рассматривать как константу, однако, в отличие от всех остальных констант ее значение определяется не данным стандартом, а разработчиком библиотеки интерфейсных функций.

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

Все отображаемые элементы создаются интерфейсными функциями, называющимися, так же как и сам отображаемый элемент. Интерфейсные функции создающие отображаемые элементы возвращают значения типа Visible. Если при вызове создающей отображаемый элемент функции элемент не был создан, то функция возвращает значение Null.

2.6.2 Соглашение о передаче значений отображаемым элементам

Отображаемые элементы могут быть связаны с обычными переменными. В следующих разделах описаны отображаемые элементы, для которых должна быть установлена такая связь. При изменении значения связанной переменной программным путем для отображения этого изменения должна быть вызвана функция Refresh, с переменной типа Visible данного элемента в качестве параметра. При связывании переменной и отображаемого элемента необходимо совпадение типа переменной с связываемым переменной этого отображаемого элемента.

2.6.3 Перечень отображаемых элементов

Название элемента: Window (окно).

Параметры при создании:

  • BeginX, BeginY – Координаты верхнего левого угла окна относительно владельца.
  • SizeX, SizeY – Горизонтальный и вертикальный размеры окна.
  • ScrollX, ScrollY – Целочисленные параметры, задающие наличие у окна горизонтальной и вертикальной полосы прокрутки. Если значение параметра равно нулю, то соответствующая полоса прокрутки отсутствует, при любом другом значении параметра в окно включается соответствующая полоса прокрутки.
  • Text – Название окна.

Описание элемента. Элемент Window может являться владельцем любых других отображаемых элементов, кроме элементов типа Dialog. При вызове функции Refresh, с элементом типа Window в качестве параметра, обновляется изображение не только самого окна, но и всех отображаемых элементов, для которых это окно является владельцем. Для отображения созданного окна на экране необходимо вставить его (вызвать функцию Insert, с данным окном в качестве второго параметра.) в отображенное на экран окно, диалог или в отображаемый элемент MainVisible. Для того чтобы убрать окно с экрана, необходимо вызвать функцию Delete, с данным окном в качестве параметра. Для уничтожения окна необходимо вызвать функцию Erase, с данным окном в качестве параметра. При этом уничтожаются так же и все отображаемые элементы, для которых данное окно являлось владельцем.

 

Название элемента: Dialog (Диалог).

Параметры при создании:

  • BeginX, BeginY – Координаты верхнего левого угла окна диалога относительно владельца.
  • SizeX, SizeY – Горизонтальный и вертикальный размеры окна диалога.
  • ScrollX, ScrollY – Целочисленные параметры, задающие наличие у окна диалога горизонтальной и вертикальной полосы прокрутки. Если значение параметра равно нулю, то соответствующая полоса прокрутки отсутствует, при любом другом значении параметра в окно диалога включается соответствующая полоса прокрутки.
  • Text – Название окна диалога.

Описание элемента. Элемент Dialog может являться владельцем любых других отображаемых элементов. Этот элемент является модальным, то есть во время работы диалога невозможен вызов меню, переход в другие окна и диалоги и т.д. Если одновременно активно несколько диалогов, то модальным является последний по порядку отображения на экране. При закрытии текущего диалога модальность переходит к предыдущему и т.д. При вызове функции Refresh, с элементом типа Dialog в качестве параметра, обновляется изображение не только самого окна диалога, но и всех отображаемых элементов, для которых этот диалог является владельцем. Для отображения созданного диалога на экране необходимо вставить его (вызвать функцию Insert, с данным диалогом в качестве второго параметра.) в отображаемый элемент MainVisible. С этого момента диалог становится модальным. Он остается модальным либо до вставки в MainVisible другого диалога, либо до закрытия диалога. Если модальность потеряна диалогом из-за запуска следующего диалога, то при закрытии последнего диалога статус модальности восстанавливается. Для того чтобы закрыть диалог, необходимо вызвать функцию Delete, с данным диалогом в качестве параметра. Для уничтожения диалога необходимо вызвать функцию Erase, с данным диалогом в качестве параметра. При этом уничтожаются так же и все отображаемые элементы, для которых данный диалог являлся владельцем.

 

Название элемента: Label (метка).

Параметры при создании:

  • BeginX, BeginY – Координаты верхнего левого угла метки относительно владельца.
  • SizeX, SizeY – Горизонтальный и вертикальный размеры метки.
  • Text – текст метки.

Описание элемента. Элемент Label не может являться владельцем других отображаемых элементов. Этот элемент не связан с переменными. Как правило, он используется для организации отображения в окне или диалоге статической информации или в качестве подписи поля ввода. Если метка связана с полем ввода, то передача управления этой метке автоматически влечет за собой передачу управления связанному с ней полю. Для организации связи метки с полем необходимо вызвать функцию Link, передав ей в качестве первого параметра метку, а вторым параметром тот элемент, с которым необходимо установить связь. Связь может быть установлена только с одним элементом. При повторном вызове функции Link устанавливается связь с новым элементом, а связь с прежним элементом разрывается. Для включения метки в окно или диалог, необходимо вызвать функцию Insert, с окном или диалогом в качестве первого параметра и меткой в качестве второго параметра. Для уничтожения метки необходимо вызвать функцию Erase, с данной меткой в качестве параметра.

 

Название элемента: StringVisible (строковый элемент).

Параметры при создании:

  • BeginX, BeginY – Координаты верхнего левого угла элемента относительно владельца.
  • SizeX, SizeY – Горизонтальный и вертикальный размеры элемента.
  • Size – размер поля.

Описание элемента. Элемент StringVisible не может являться владельцем других отображаемых элементов. Этот элемент должен быть связан с переменной типа String. Для установления связи используется функция Data со строковым элементом в качестве первого параметра и адресом переменной в качестве второго параметра. Как правило, строковый элемент связывают с меткой. Для организации связи метки со строковым элементом необходимо вызвать функцию Link, передав ей в качестве первого параметра метку, а вторым параметром строковый элемент. Для включения строкового элемента в окно или диалог, необходимо вызвать функцию Insert, с окном или диалогом в качестве первого параметра и строковым элементом в качестве второго параметра. Для уничтожения строки необходимо вызвать функцию Erase, с данным строковым элементом в качестве параметра. Параметр Size задает максимальный размер вводимой строки в символах.

 

Название элемента: RealVisible (LongVisible) (числовой элемент).

Параметры при создании:

  • BeginX, BeginY – Координаты верхнего левого угла элемента относительно владельца.
  • SizeX, SizeY – Горизонтальный и вертикальный размеры элемента.
  • Min, Max – минимальное и максимальное допустимые значения.
  • Size – размер поля.

Описание элемента. Элементы RealVisible и LongVisible служат для ввода действительных и длинных целых чисел, соответственно. Любой такой элемент должен быть связан с переменной соответствующего типа (Real или Long) и не может являться владельцем других отображаемых элементов. Для установления связи используется функция Data с числовым элементом в качестве первого параметра и адресом переменной в качестве второго параметра. Как правило, числовой элемент связывают с меткой. Для организации связи метки с числовым элементом необходимо вызвать функцию Link, передав ей в качестве первого параметра метку, а вторым параметром числовой элемент. Для включения числового элемента в окно или диалог, необходимо вызвать функцию Insert, с окном или диалогом в качестве первого параметра и числовым элементом в качестве второго параметра. Для уничтожения числового элемента необходимо вызвать функцию Erase, с данным числовым элементом в качестве параметра.

 

Название элемента: RadioButtons (переключатели).

Параметры при создании:

  • BeginX, BeginY – Координаты верхнего левого угла элемента относительно владельца.
  • SizeX, SizeY – Горизонтальный и вертикальный размеры элемента.

Описание элемента. Элемент RadioButtons служит для задания значения параметрам, которые могут принимать только несколько значений (например, два значения – истина или ложь). Процедура создания элемента RadioButtons сложнее, чем для ранее рассмотренных процедур. Кроме вызова функции RadioButtons, создающей элемент, необходимо несколько раз вызвать функцию AddItem, с элементом RadioButtons в качестве первого аргумента и подписью переключателя в качестве второго аргумента. Элемент RadioButtons должен быть связан с переменной типа Long и не может являться владельцем других отображаемых элементов. Для установления связи используется функция Data с элементом RadioButtons в качестве первого параметра и адресом переменной в качестве второго параметра. Элемент RadioButtons интерпретирует данные, содержащиеся в переменной, следующим образом: первому флагу соответствует младший бит переменной, второму следующий по старшинству и т. д. Элемент не может включать более 32 флагов. Биты с номерами большими числа флагов очищаются (заменяются нулями). Как правило, элемент RadioButtons связывают с меткой. Для организации связи метки с элементом RadioButtons необходимо вызвать функцию Link, передав ей в качестве первого параметра метку, а вторым параметром элемент RadioButtons. Для включения элемента RadioButtons в окно или диалог, необходимо вызвать функцию Insert, с окном или диалогом в качестве первого параметра и элементом RadioButtons в качестве второго параметра. Для уничтожения элемента RadioButtons необходимо вызвать функцию Erase, с данным элементом RadioButtons в качестве параметра.

 

Название элемента: CheckBoxes (группа флагов).

Параметры при создании:

  • BeginX, BeginY – Координаты верхнего левого угла элемента относительно владельца.
  • SizeX, SizeY – Горизонтальный и вертикальный размеры элемента.

Описание элемента. Элемент CheckBoxes служит для задания значения параметрам, которые являются совокупностью битовых флагов. Процедура создания группы флагов аналогична созданию элемента RadioButtons. Кроме вызова функции CheckBoxes, создающей элемент, необходимо несколько раз вызвать функцию AddItem, с элементом CheckBoxes в качестве первого аргумента и названием флага в качестве второго аргумента. Элемент CheckBoxes должен быть связан с переменной типа Long и не может являться владельцем других отображаемых элементов. Для установления связи используется функция Data с элементом CheckBoxes в качестве первого параметра и адресом переменной в качестве второго параметра. Элемент CheckBoxes интерпретирует данные, содержащиеся в переменной, следующим образом: если значение переменной равно единице, то включен первый переключатель, если двум – то второй, трем – первые два и т. д. Если значение переменной меньше либо равно нулю или больше либо равно два в степени числа переключателей, то оно заменяется на единицу. Как правило, элемент CheckBoxes связывают с меткой. Для организации связи метки с элементом CheckBoxes необходимо вызвать функцию Link, передав ей в качестве первого параметра метку, а вторым параметром элемент CheckBoxes. Для включения группы флагов в окно или диалог, необходимо вызвать функцию Insert, с окном или диалогом в качестве первого параметра и элементом CheckBoxes в качестве второго параметра. Для уничтожения элемента CheckBoxes необходимо вызвать функцию Erase, с данным элементом CheckBoxes в качестве параметра.

 

Название элемента: Button(кнопка).

Параметры при создании:

  • BeginX, BeginY – Координаты верхнего левого угла элемента относительно владельца.
  • SizeX, SizeY – Горизонтальный и вертикальный размеры элемента.
  • Macro – Адрес функции, вызываемой при нажатии кнопки. В зависимости от реализации по этому адресу может лежать либо начало машинного кода функции, либо начало текста функции. В случае передачи текста функции первые восемь байт по переданному адресу содержат слово «Function».

Описание элемента. Кнопка служит для запуска макроса, который выполняет некоторые действия, являющиеся реакцией на нажатие кнопки. Кнопка не может быть связана с переменными и не может являться владельцем других отображаемых элементов. Для включения кнопки элемента в окно или диалог, необходимо вызвать функцию Insert, с окном или диалогом в качестве первого параметра и кнопкой в качестве второго параметра. Для уничтожения кнопки необходимо вызвать функцию Erase, с данной кнопкой в качестве параметра.

2.6.4 Перечень интерфейсных функций

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

AddItem

Function AddItem(Elem : Visible; Text : String ) : Logic;

Описание аргументов:

  • Elem – Отображаемый элемент типа CheckBoxes или RadioButtons.
  • Text – Название переключателя или флага.

Описание функции:

Эта функция добавляет название переключателя (если первый аргумент типа RadioButtons) или флага (CheckBoxes) к списку элемента, передаваемого функции первым аргументом. Если первый элемент не является элементом типа CheckBoxes или RadioButtons, то функция возвращает значение ложь (False). В случае успешного завершения операции добавления в список функция возвращает значение истина (True). В противном случае возвращается значение ложь (False).

Button

Function Button(BeginX, BeginY, SizeX, SizeY : Long; Macro : PString ) : Visible;

Описание аргументов:

  • BeginX, BeginY – Координаты верхнего левого угла элемента относительно владельца.
  • SizeX, SizeY – Горизонтальный и вертикальный размеры элемента.
  • Macro – Адрес функции, вызываемой при нажатии кнопки.

Описание функции:

Эта функция создает отображаемый элемент типа Button. Если создание прошло успешно, то возвращается значение этого элемента (типы значений не оговариваются стандартом, но, как правило, это адрес соответствующей структуры). Если создание элемента завершилось не удачно, то возвращается значение Null.

CheckBoxes

Function CheckBoxes( BeginX, BeginY, SizeX, SizeY : Long ) : Visible;

Описание аргументов:

  • BeginX, BeginY – Координаты верхнего левого угла элемента относительно владельца.
  • SizeX, SizeY – Горизонтальный и вертикальный размеры элемента.

Описание функции:

Эта функция создает отображаемый элемент типа CheckBoxes с пустым списком переключателей. Для добавления переключателей следует воспользоваться функцией AddItem. Если создание прошло успешно, то возвращается значение этого элемента (типы значений не оговариваются стандартом, но, как правило, это адрес соответствующей структуры). Если создание элемента завершилось не удачно, то возвращается значение Null.

Data

Function Data( Element : Visible; Var Datum ) : Logic;

Описание аргументов:

  • Element – Отображаемый элемент, который связывается с переменной.
  • Datum – Адрес переменной.

Описание функции:

Эта функция связывает отображаемый элемент (Element) с перемнной Datum. Если элемент Element не допускает установления связи с переменной, то функция возвращает значение ложь (False). В противном случае она устанавливает связь между элементом и переменной и возвращает значение истина (True). Отметим, что функция не проверяет типа переменной. Если вместо адреса переменной типа длинное целое был дан адрес переменной действительного типа, то эта переменная будет интерпретироваться как длинное целое (см. разд. «Функции приведения типов»). Важно отметить, что производится приведение переменной, а не преобразование ее значения.

Delete

Function Delete( Owner, Element : Visible) : Logic;

Описание аргументов:

  • Owner – Отображаемый элемент типа окно или диалог, из которого происходит удаление.
  • Element – Удаляемый элемент.

Описание функции:

Эта функция удаляет отображаемый элемент (Element) из его владельца (Owner). Если элемент Owner не является окном или диалогом, или если он не является владельцем элемента Element, то функция возвращает значение ложь (False). В противном случае она удаляет элемент из владельца и возвращает значение истина (True). Отметим, что элемент удаляется, но не уничтожается. Если нет переменной, содержащей удаляемый элемент, то элемент «потеряется», то есть он станет недоступным из программы, но будет занимать память.

Dialog

Function Dialog(BeginX, BeginY, SizeX, SizeY, ScrollX, ScrollY : Long; Text : String ) : Visible;

Описание аргументов:

  • BeginX, BeginY – Координаты верхнего левого угла элемента относительно владельца.
  • SizeX, SizeY – Горизонтальный и вертикальный размеры элемента.
  • ScrollX, ScrollY – Целочисленные параметры, задающие наличие у окна горизонтальной и вертикальной полосы прокрутки. Если значение параметра равно нулю, то соответствующая полоса прокрутки отсутствует, при любом другом значении параметра в окно включается соответствующая полоса прокрутки.
  • Text – Название окна.

Описание функции:

Эта функция создает отображаемый элемент типа диалог. Если создание прошло успешно, то возвращается значение этого элемента (типы значений не оговариваются стандартом, но, как правило, это адрес соответствующей структуры). Если создание элемента завершилось не удачно, то возвращается значение Null. После создания диалог является пустым.

Erase

Function Erase( Element : Visible ) : Logic;

Описание аргументов:

  • Element – Уничтожаемый элемент.

Описание функции:

Эта функция уничтожает отображаемый элемент (Element). Если аргумент Element является окном или диалогом, то уничтожаются так же все отображаемые элементы, для которых элемент Element является владельцем. Если операция завершена успешно, то функция возвращает значение истина (True). В противном случае – значение ложь (False). Если выполнение функции завершилось неуспешно (функция вернула значение ложь), то элемент может быть поврежден и его дальнейшее использование не гарантирует корректной работы.

Insert

Function Insert( Owner, Element : Visible) : Logic;

Описание аргументов:

  • Owner – Отображаемый элемент типа окно или диалог, в который производится вставка.
  • Element – Вставляемый элемент.

Описание функции:

Эта функция вставляет отображаемый элемент (Element) в элемент (Owner). Если элемент Owner не является окном или диалогом, или если Element является диалогом, то функция возвращает значение ложь (False). Такие же действия производятся, в случае, если аргумент Owner совпадает с MainVisible, а Element не является окном или диалогом. В противном случае она вставляет элемент в Owner и возвращает значение истина (True). Вставка окна или диалога в MainVisible вызывает отображение его на экране, а в случае, если вставляется диалог, то ему передается управление.

Label

Function Label( BeginX, BeginY, SizeX, SizeY : Long; Text : String ) : Visible;

Описание аргументов:

  • BeginX, BeginY – Координаты верхнего левого угла элемента относительно владельца.
  • SizeX, SizeY – Горизонтальный и вертикальный размеры элемента.
  • Text – текст метки.

Описание функции:

Эта функция создает отображаемый элемент типа Label. Если создание прошло успешно, то возвращается значение этого элемента (типы значений не оговариваются стандартом, но, как правило, это адрес соответствующей структуры). Если создание элемента завершилось не удачно, то возвращается значение Null.

Link

Function Link( Element, Labels : Visible) : Logic;

Описание аргументов:

  • Owner – Отображаемый элемент, связываемый с меткой.
  • Element – Отображаемый элемент – метка.

Описание функции:

Эта функция устанавливает связь между меткой Labels и отображаемым элементом Element. Если элемент Labels не является меткой, то функция возвращает значение ложь (False). В противном случае она устанавливает связь и возвращает значение истина (True).

LongVisible

Function LongVisible( BeginX, BeginY, SizeX, SizeY, Min, Max, Size: Long ) : Visible;

Описание аргументов:

  • BeginX, BeginY – Координаты верхнего левого угла элемента относительно владельца.
  • SizeX, SizeY – Горизонтальный и вертикальный размеры элемента.
  • Min, Max – минимальное и максимальное допустимые значения.
  • Size – размер поля в символах.

Описание функции:

Эта функция создает отображаемый элемент типа LongVisible для редактирования и ввода значений типа Long. Если создание прошло успешно, то возвращается значение этого элемента (типы значений не оговариваются стандартом, но, как правило, это адрес соответствующей структуры). Если создание элемента завершилось не удачно, то возвращается значение Null.

RadioButtons

Function RadioButtons( BeginX, BeginY, SizeX, SizeY : Long ) : Visible;

Описание аргументов:

  • BeginX, BeginY – Координаты верхнего левого угла элемента относительно владельца.
  • SizeX, SizeY – Горизонтальный и вертикальный размеры элемента.

Описание функции:

Эта функция создает отображаемый элемент типа RadioButtons с пустым списком флагов. Для добавления переключателей следует воспользоваться функцией AddItem. Если создание прошло успешно, то возвращается значение этого элемента (типы значений не оговариваются стандартом, но, как правило, это адрес соответствующей структуры). Если создание элемента завершилось не удачно, то возвращается значение Null.

RealVisible

Function RealVisible ( BeginX, BeginY, SizeX, SizeY : Long; Min, Max : Real; Size: Long ) : Visible;

Описание аргументов:

  • BeginX, BeginY – Координаты верхнего левого угла элемента относительно владельца.
  • SizeX, SizeY – Горизонтальный и вертикальный размеры элемента.
  • Min, Max – минимальное и максимальное допустимые значения.
  • Size – размер поля в символах.

Описание функции:

Эта функция создает отображаемый элемент типа RealVisible для редактирования и ввода значений типа Real. Если создание прошло успешно, то возвращается значение этого элемента (типы значений не оговариваются стандартом, но, как правило, это адрес соответствующей структуры). Если создание элемента завершилось не удачно, то возвращается значение Null.

Refresh

Function Refresh( Element : Visible ) : Logic;

Описание аргументов:

  • Element – Отображаемый элемент.

Описание функции:

Эта функция обновляет изображение элемента Element на экране. Если операция прошла успешно, то функция возвращает значение истина (True). В противном случае она возвращает значение ложь (False).

StringVisible

Function StringVisible ( BeginX, BeginY, SizeX, SizeY, Size: Long ) : Visible;

Описание аргументов:

  • BeginX, BeginY – Координаты верхнего левого угла элемента относительно владельца.
  • SizeX, SizeY – Горизонтальный и вертикальный размеры элемента.
  • Size – размер поля в символах.

Описание функции:

Эта функция создает отображаемый элемент типа StringVisible для редактирования и ввода символьных строк. Если создание прошло успешно, то возвращается значение этого элемента (типы значений не оговариваются стандартом, но, как правило, это адрес соответствующей структуры). Если создание элемента завершилось не удачно, то возвращается значение Null.

Window

Function Window( BeginX, BeginY, SizeX, SizeY, ScrollX, ScrollY : Long; Text : String ) : Visible;

Описание аргументов:

  • BeginX, BeginY – Координаты верхнего левого угла элемента относительно владельца.
  • SizeX, SizeY – Горизонтальный и вертикальный размеры элемента.
  • ScrollX, ScrollY – Целочисленные параметры, задающие наличие у окна горизонтальной и вертикальной полосы прокрутки. Если значение параметра равно нулю, то соответствующая полоса прокрутки отсутствует, при любом другом значении параметра в окно включается соответствующая полоса прокрутки.
  • Text – Название окна.

Описание функции:

Эта функция создает отображаемый элемент типа окно. Если создание прошло успешно, то возвращается значение этого элемента (типы значений не оговариваются стандартом, но, как правило, это адрес соответствующей структуры). Если создание элемента завершилось не удачно, то возвращается значение Null. После создания окно является пустым.

2.7 Строковые функции

В этом разделе описан набор функций для работы со строками, которые могут использоваться в языках описания всех компонентов нейрокомпьютера.

Function SubStr( S : String; Origin, Leng : Integer ) : String;

Описание аргументов:

  • S – строка, из которой выделяется фрагмент.
  • Origin – начальная позиция выделяемого фрагмента в строке S
  • Leng – длина выделяемого фрагмента.

Описание функции:

Выделяет из строки S фрагмент, начинающийся с позиции Origin и длиной Leng символов. Если строка короче чем Origin, то результатом является пустая строка. Если строка длиннее чем Origin символов, но короче чем Origin+Leng символов, то результатом является фрагмент строки S с символа Origin и до конца строки S.

Function Pos( S1, S2 : String ) : Integer

Описание аргументов:

  • S1 – строка, в которой ищется вхождение строки S2.
  • S2 – строка, вхождение которой ищется.

Описание функции:

Функция Pos возвращает номер первого символа в строке S1, начиная с которого, в строке S1 полностью содержится строка S2. Если строка S2 ни разу не встретилась в строке S1, то результат равен нулю.

Function Len( S : String ) : Integer

Описание аргументов:

  • S – строка, длина которой вычисляется.

Описание функции:

Функция Len возвращает длину (число символов) строки S

2.8 Описание языка описания компонентов

В табл. 12 приведен список ключевых слов, общих для всех языков описания компонентов нейрокомпьютера. Кроме того, к ключевым словам относятся типы данных, приведенные в табл. 1; обозначения операций, приведенные в табл. 3, 7, 8, 9, 10; названия функций преобразования (табл. 5) и приведения типов (табл. 6); идентификаторы предопределенных констант, приведенные в табл. 11; имена интерфейсных функций, приведенных в разделе «Перечень интерфейсных функций»; обозначения элементарных функций, приведенных в табл.13; обозначения строковых функций, приведенных в разделе «Строковые функции» и обозначения функций управления памятью из раздела «функции управления памятью».

2.8.1 Передача аргументов функциям

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

Таблица 12

Ключевые слова, общие для всех языков описания компонент нейрокомпьютера.

Ключевое слово Краткое описание
Begin Начало описания тела процедуры, ли операторных скобок.
By Часть оператора цикла с шагом. редшествует шагу цикла.
Do Завершающая часть операторов цикла.
Else Часть условного оператора. Предшествует оператору, выполняемому, если условие ложно.
End Конец описания тела процедуры или операторных скобок.
For Заголовок оператора цикла с шагом.
Function Заголовок описания функции.
Global Начло блока описания глобальных переменных.
GoTo Начало оператора перехода.
If Начало условного оператора.
Include Предшествует имени файла, целиком вставляемого в это место описания.
Label Начало описания меток
Name Предшествует имени статической переменной.
SetParameters Признак раздела установления значений параметров.
Static Начло блока описания статических переменных.
Then Часть условного оператора, предшествующая оператору, выполняемому, если условие истинно.
To Часть оператора цикла с шагом. Предшествует верхней границе цикла.
Var Начло блока описания переменных.
While Заголовок оператора цикла по условию.

Таблица 13

Элементарные функции, допустимые в языках описания компонент нейрокомпьютера

Обозначение Значение Обозначение Значение
Sin Синус Cos Косинус
Tan Тангенс Atan Арктангенс
Sh Гиперболический синус Ch Гиперболический косинус
Th Гиперболический тангенс Lg Логарифм двоичный
Ln Логарифм натуральный Exp Экспонента
Sqrt Квадратный корень Sqr Квадрат
Abs Абсолюеное значение Sign Знак аргумента (0 – минус)

2.8.2 Имена структурных единиц компонентов

Компоненты предобработчик, сеть, оценка и интерпретатор ответа имеют иерархическую структуру. Часть запросов может быть адресована не всему компоненту, а его структурной единице любого уровня. Для точного указания адресата запроса используется полное имя структурной единицы, которое строится по следующему правилу:

  1. Имя компонента является полным именем компонента.
  2. Полное имя младшей структурной единицы строится путем добавления справа к имени старшей структурной единицы точки, псевдонима младшей структурной единицы и номера экземпляра младшей структурной единицы, если младших структурных единиц с таким псевдонимом несколько.

Иногда при построении описания компонента требуется однозначное имя структурной единицы. В качестве однозначного имени можно использовать полное имя, но такой подход лишает возможности вставлять подготовленные структурные единицы в структуры более высокого уровня. Для этого вводится понятие однозначного имени структурной единицы: в описании структурной единицы A однозначным именем структурной единицы B, являющейся частью структурной единицы A, является полное имя структурной единицы B, из которого исключено полное имя структурной единицы A.

2.8.3 Описание синтаксических конструкций

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

  • <Имя> – нетерминальный символ – понятие которое было раскрыто или будет раскрыто далее;
  • Имя – терминальный символ – понятие, не требующее раскрытия;
  • Имя – ключевое слово – подмножество терминальных символов;
  • [Имя] – необязательный элемент – синтаксическая конструкция, заключенная в скобки может отсутствовать;
  • {Имя1 | Имя2 | Имя3}– одно из значений – может присутствовать одно и только одно из разделенных символом | значений.

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

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

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

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

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

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

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