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-компилятором) производится вывод символьной строки и
результата выполнения пользовательской функции.
|