Дисциплина
"Программное обеспечение систем передачи данных"

Содержание

2.6. Языковые и программные средства для реализации телекоммуникационных прикладных задач

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

      Рассмотрим один из таких языков - внутренний SALT-язык пакета TELIX (Script Application Language for Telix).

Общие сведения по SALT-языку

      Внутренний SALT-язык пакета TELIX обеспечивает более гибкую работу в среде пакета при организации сеансов связи с удаленными абонентами. Он позволяет легко и быстро создавать SLT-документы (SLT-файлы), ориентированные на различные прикладные задачи.

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

      Текст программы на SALT-языке называется SLT-документом или SLT-модулем (файлом). Он представляет собой последовательность предложений SALT-языка и имеет ASCII-формат. Файл, содержащий SALT-документ, может иметь любое имя, но в качестве его расширения рекомендуется использовать SLT, которое является значением по умолчанию для пакета TELIX. Для выполнения исходный SLT-файл должен быть откомпилирован автономным CS-компилятором с SALT-языка (CS.EXE).

      Результатом успешной компиляции является откомпилированный (загрузочный) SLC-файл, имеющий одинаковое с исходным файлом имя и расширение SLC.

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

      После устранения всех обнаруженных ошибок компилятор создает загрузочный SLC-файл.

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

      Основной логической единицей SALT-языка является предложение, которое заканчивается точкой с запятой. Группы предложений в документе берутся в фигурные скобки, которые являются блочными ограничителями языка.

Логическая структура SLT-документа

      В общем случае SLT-документ состоит из набора определений глобальных переменных, набора определений функций пользователя, заголовка главной функции (Main) и самого тела документа, содержащего допустимые конструкции SALT-языка. Определения первых двух наборов могут чередоваться между собой, если это не нарушает логику документа в связи с принципами глобальности и локальности определений.

      Для пояснения SLT-документов, как правило, используются комментарии. Комментарии не обрабатываются компилятором. Текст одного комментария располагается между двумя слешами и концом строки документа.

Например:

// Пример сценария на SALT-языке

      Логическая структура SLT-документа:

[ <описания глобальных переменных> ]
[ <описания функций> ]
Main ( ) { основное тело SLT-документа }

Конструкции SALT-языка

Переменные

      SALT-язык допускает использование целочисленных и символьных переменных. В качестве идентификатора переменных используются имена длиной до 31 символа из алфавита a-z, A-Z, 0-9, _. Первый символ имени не должен быть цифрой.

Примеры:

Number
A263
GUT
Name_File

      В соответствии с местом описания в SLT-документе переменные могут быть глобальными и локальными.

      Сферой действия глобальной переменной является часть SLT-документа от точки ее определения до конца документа.

      Сферой действия локальной переменной является область функции, в которой она определена.

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

Определение целочисленных переменных:

Int <имя_1>, …, <имя_k>;

      В определении можно задавать начальные значения переменных:

Int <имя_1> = <значение_1>, …, <имя_k> = <значение_k>;

      где <значение_1>…<значение_k> - целочисленные константы.

Определение символьных переменных:

Str <имя_1> [N_1], …, <имя_k> [N_k];

      где 0 < N <= 32767 - длина значения символьной константы.

      Можно задать начальные значения:

Str <имя_1> [N_1] = <значение_1>, …, <имя_k> [N_k] = <значение_k>;

      где <значение_1> … <значение_k> - символьные константы.

Примеры:

Int A, B, C;
Int D = 5, E = -5;
Str Number[7], Name[12];
Str Telix[10] = "CONNECTION"

Константы

      Целочисленная константа может быть десятичной или шестнадцатеричной.

      Десятичная константа представляет собой последовательность десятичных цифр (0-9).

      Шестнадцатеричная константа представляет собой последовательность шестнадцатеричных цифр (0-9, A-F) и начинается идентификатором "0x".

Примеры:

1942
-384789
0121002207
0x2942
0x3869F
0xABCDE

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

Функции (пользовательские)

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

Определение пользовательской функции:

<имя функции> ( [ <список формальных параметров> ] )
{ [ <описания локальных переменных> ]
[ <описания функций> ]
[ <предложения SALT-языка> ] }

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

      Элементы списка параметров разделяются запятыми и имеют формат:

<тип><идентификатор>

      где тип может быть Int или Str.

      Количество элементов списка не должно превышать 12; допускается отсутствие формальных параметров.

      Каждая функция, как правило, заканчивается предложением

RETURN [<выражение>];

по которому в точку вызова функции возвращается вычисленное значение <выражения>, имеющее тот же тип (Int или Str), что и точка вызова. При отсутствии <выражения> возвращается пустое значение.

      Для вызова функции указывается ее имя и в скобках - значения для формальных параметров (если таковые имеются).

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

Предложения SALT-языка

      Простейшим типом предложения языка является выражение, имеющее формат

<выражение>;

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

Знак оператора
Назначение
Приоритет выполнения
-
знак отрицательного числа
1
! или NOT
логическое НЕ
1
++
инкремент числа
2
--
декремент числа
2
*
произведение
3
/
деление
3
%
остаток по модулю
3
+
сложение
4
-
вычитание
4
<
меньше
5
>
больше
5
<=
меньше или равно
5
>=
больше или равно
5
==
тождество
6
!=
неравенство
6
&
побитная операция И
7
|
побитная операция ИЛИ
8
&& или AND
логическая операция И
9
|| или OR
логическая операция ИЛИ
10
=
операция присваивания
11

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

Примеры:

A != (X * Y + Z / K) - 85
X = (Y + 51 * Z) / P
P = X % 5
A <= B
C == B * (X + Y / Z)
Y = -51 * 2 * (P * L - 8)

Примеры предложения-выражения:

Artur = 130288;
Text = "TELIX";
X = 51 * (X + Y / K) / P + 93;

IF-предложение

      IF-предложение имеет два формата:

      1)

IF ( <выражение> ) { <предложение или группа предложений> };

      Предложение или группа предложений выполняются только тогда, когда значение <выражения> отлично от нуля (истинно), в противном случае выполняется следующее за IF предложение;

      2)

IF ( <выражение> ) { <предложение или группа предложений 1> }; ELSE { <предложение или группа предложений 2> };

      Выполняется <предложение или группа предложений 1>, если значение <выражения> истинно, в противном случае выполняется <предложение или группа предложений 2>.

      Допускается использование вложенных IF-предложений.

Примеры:

IF (C > 0) Y = X + 51 * Z;
IF (A / 5 <= 1995 / X) B = (C + D * M) / P; ELSE A = X;
IF (A > 0) B = 5; ELSE IF (A < 0) B = -5; ELSE B = 0;

WHILE-предложение

      WHILE-предложение имеет следующий формат:

WHILE ( <выражение> ) { <предложение или группа предложений> };

      Выполняется <предложение или группа предложений> до тех пор, пока значение <выражения> истинно. Если же <выражение> ложно при первом же его вычислении, то предложение не выполняется ни разу.

GOTO-предложение

      GOTO-предложение обеспечивает безусловный переход в SLT-документе и имеет следующий формат:

GOTO <метка>;

      В качестве <метки>используется идентификатор, определяющий в документе место, куда передается управление.

      Идентификатор задается следующим образом:

<идентификатор>:

DO-WHILE-предложение

      DO-WHILE-предложение имеет следующий формат:

DO { <предложение или группа предложений> } WHILE ( <выражение> );

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

FOR-предложение

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

FOR ( <выражение 1>; <выражение 2>; <выражение 3> ) { <предложение или группа предложений> };

где
      <выражение 1> инициализирует переменную цикла, присваивая ей начальное значение;
      <выражение 3> определяет приращение шага цикла;
      <выражение 2> задает логическое завершение цикла;

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

      Допускается вложение циклов.

BREAK-предложение

      BREAK-предложение имеет формат:

BREAK;

      Служит для выхода из циклических участков SLT-документа. После выхода из цикла выполняется следующее за ним предложение документа.

      Если BREAK-предложение используется в конструкции вложенных циклов, то оно осуществляет выход только непосредственно из цикла, в котором оно определено.

CONTINUE-предложение

      CONTINUE-предложение имеет формат:

CONTINUE;

      Используется подобно BREAK-предложению только в теле циклической конструкции и предназначено для пропуска следующих за ним предложений тела цикла.

      Приведем пример простейшего SLT-документа:

// Primer 1
Str S[10] = "SALT-TELIX";
F (Int X, Int Y)
{
Int Z;
Z = (X + Y) * 2 + X * Y + 54;
RETURN Z;
}
Main ()
{
Prints (S);
Printn (F (3, 7));
}

      В результате выполнения данного примера (после обработки его CS-компилятором) производится вывод символьной строки и результата выполнения пользовательской функции.

<<< ^^^ >>>
Created by Aleksey Vishnyakov © 2002