KorNet 1.5

А.В. Корочков
Система программирования на основе
языка С++ для работы с моделью данных типа
"семантическая сеть" ("KorNet")

Описание системы (1995)

(См. также KorNet Развитие системы KorNet 1.5)


5.2 Макроязык системы KorNet (часть I)


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

A - первый параметр,
B - второй параметр,
С - третий параметр,
и т.д.

Конкретизация типов параметров приводится в описании макрокоманд,
например, char*.

Некоторые макрокоманды, описываемые ниже, имеют модификацию,
позволяющую проверить значение переменной Result после выполнения
вызываемой в макрокоманде функции системы. Модифицированная форма
имеет дополнительный символ "c" в конце названия макрокоманды и два
дополнительных параметра. Последний в описании модифицированной
макрокоманды параметр задает метку оператора, к которому необходимо
перейти при наличии условия, заданного предпоследним параметром.
Этот параметр может принимать значения goyes и gono. Если задано goyes,
то переход осуществляется при Result==1, если gono - при Result==0.
Базовая и модифицированная формы описываются совместно.

Далее в тексте выражение "сеть A ..." надо понимать как
"сеть (подсеть), начинающаяся с узла A, ...".



abort(A)

A - char*

В зависимости от значения переменной Result завершить работу
системы по exit(1) с выдачей в cerr сообщения A.


abortl(A,B)

A - идентификатор
B - char*

В зависимости от значения переменной A завершить работу
системы по exit(1) с выдачей в cerr сообщения B.


addelem(A,B)

A - node*/fnode*
B - long/char*/node*/fnode*

Привесить узлу A безымянный атрибут со значением B.

Пример:
defnode(Pictures); //создание нового узла
addelem(Pictures,"поле");
addelem(Pictures,"лес");
addelem(Pictures,"озеро");

Состояние участка сети до выполнения операций addelem:

* (Pictures)


Состояние участка сети после выполнения операций:

* (Pictures)
|
| (0)
\--------> "поле"
| (0)
\--------> "лес"
| (0)
\--------> "озеро"


allelem(A,B,C) и firstelem(A,B,C)

A - node*/fnode*
B - long/char*/node*/fnode*
C - marker

Начать перебор безымянных атрибутов узла A со значением типа B,
используя ранее объявленный маркер C типа marker. Первое
найденное значение поместить в B.
Примечание.
Маркер создается и инициализируется оператором marker A,
где A - имя переменной. Макрокоманда firstelem и ее синоним
allelem помимо прочего инициализируют существующий маркер.
Кроме того существующий маркер может быть установлен в
начальное значение (для перебора с начала) макрокомандой
initmarker(A), где A - marker.

Пример:
char* fileNumber="00";
.
.
marker markFile;
firstelem(readFiles,fileNumber,markFile);
while (Result==1)
{
.
.
.
nextelem(readFiles,fileNumber,markFile);
}


ascribe(A,B)
ascribec(A,B,C,D)

A - fnode*
B - node*
C - goyes/gono
D - метка перехода


Приписать атрибуты узла A из АСБД узлу B в АС.


ascribea(A,B)
ascribeac(A,B,C,D)

A - char*
B - node*
C - goyes/gono
D - метка перехода


Приписать атрибуты атома A (атомарного узла) из АСБД узлу B в АС.


atom(A,B) и defatom(A,B)

A - char*
B - node*

Найти или образовать атом A в АС и указатель на его атомарный узел
поместить в новую переменную с идентификатором B. Эта переменная
будет иметь тип node*.

Пример:
atom("task",Task);


countelems(A,B)

A - node*/fnode*
B - int

Подсчитать количество безымянных атрибутов узла A. Полученное
число поместить в существующую переменную типа int с
идентификатором B.

declfnode(A)

A - идентификатор


Образовать новый объект класса fnode. Указатель на него
поместить в новую переменную с идентификатором A. Эта переменная
будет иметь тип fnode*.

Пример:
declfnode(Ready);

declnode(A)

A - идентификатор

Эквивалент описания "node* A".

Пример:
declnode(Book);

defafnode(A)

A - идентификатор

Создать новый узел в АСБД и счетчик ссылок на него установить в
1. Указатель на него поместить в новую переменную с иденти-
фикатором A. Эта переменная будет иметь тип fnode*.


deffnode(A)

A - идентификатор

Создать новый узел в АСБД. Указатель на него поместить в
новую переменную с идентификатором A. Эта переменная будет
иметь тип fnode*.


defnode(A)

A - идентификатор


Образовать новый узел в АС и указатель на него поместить в новую
переменную типа node* с идентификатором A.


defnodes(A,B)

То же, что и defnode, только для двух узлов сразу.


delattr(A,B)
delattrc(A,B,C,D)

A - node*/fnode*
B - long/char*
C - goyes/gono
D - метка перехода

Удалить атрибут B у узла A.

Пример:
atom("изобретения",Create);
delattr(Create,"двигатели");

Состояние участка сети до выполнения операции:

"изобретения"    
* (Create)    
|    
| "двигатели"    
\------------------> * (узел)  
| | (0)  
| "шасси" \----------------> * (узел)
\--------> *(узел) | | "фирма"
. | (0) \--------> "ferrari"
  \----------------> * (узел)
  | | "фирма"
. | (0) \--------> "volvo"
  \----------------> * (узел)
  | | "фирма"
. | (0) \--------> "reno"
  \----------------> * (узел)
    | "фирма"
.   \--------> "citroen"




Состояние участка сети после выполнения операции:

"изобретения"    
* (Create) * (узел)  
| | (0)  
| "шасси" \----------------> * (узел)
\--------> *(узел) | | "фирма"
. | (0) \--------> "ferrari"
  \----------------> * (узел)
  | | "фирма"
. | (0) \--------> "volvo"
  \----------------> * (узел)
  | | "фирма"
. | (0) \--------> "reno"
  \----------------> * (узел)
    | "фирма"
.   \--------> "citroen"

 


  1. Модель данных
  2. Реализация сети
  3. Использование системы KorNet
  4. Дополнительные программы
    4.1 Интерфейсная программа TVDianet
    4.2 Интерфейсная программа ClDianet
    4.3 Программа создания снимка сети
  5. Приложения
    5.1 Операции в сети и соответствующие им макрокоманды
    5.2 Макроязык системы KorNet (часть I)
      Макроязык системы KorNet (часть II)
      Макроязык системы KorNet (часть III)
    5.3 Комплектация системы

Следующая часть макро || KorNet Развитие системы KorNet 1.5 || Переход на основную страницу

Переход на основную страницу Рейтинг@Mail.ru
Copyright © 1999 А.В.Корочков
Последнее обновление: Август 02, 2000.
Hosted by www.Geocities.ws

1