Оператор описания в PL/I (DECLARE).

Различные объекты, используемые в программе, могут быть описаны в операторе описания. Этот оператор в общем виде может быть представлен следующим образом:

DECLARE n1N1a11a12… a1k, n2N2a21a22…a2p,…, nmNmam1,am2,…,aml;

где Ni – идентификатор (имя описываемого объекта); ni – номер уровня, задаваемый только при описании структур, в остальных случаях ni – пусто; aij – описатели (атрибуты), к числу которых относятся описатели типа данных, измерения и др. Описатели данного объекта могут следовать в любом порядке. Исключение составляют описатели точности, длины, и измерения массива, для которых установлен определённый порядок следования.

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

Описатели типа данных. Описатели типа данных могут применяться для скалярных переменных, а также для массивов скалярных переменных и для элементов структур.

Для арифметических данных применяются описатели: типа – REAL и COMPLEX, системы счисления – BINARY и DECIMAL, формы представления -FIXED и FLOAT, точности (p) или (p,q).

Эти описатели могут применяться в любой комбинации. Можно опускать какие-либо из названных описателей. В этом случае действуют правила «по умолчанию»: если некоторые из описателей отсутствуют, то эти описатели приписываются автоматически из совокупности описателей REAL, DECIMAL, FLOAT. Если опущены все описатели типа, основания и формы представления, то автоматически приписываются описатели: REAL, DECIMAL и FIXED для имён, начинающихся с одной из букв I, J, K ,L, M, N и REAL, DECIMAL и FLOAT для имён, начинающихся с любой другой буквы. По такому же правилу приписывают описатели переменным, вообще не описанным в операторе описания.

Для описателей точности имеются следующие правила по умолчанию: если для чисел с фиксированной точкой не задан масштабный множитель q, то предполагается, что он равен нулю; если описатель точности не задан вообще, то предполагается, что число цифр для переменных, имеющих явно или по умолчанию описатели BINARY и FIXED, равно 15, для имеющих описатели BINARY и FLOAT, равно 21, для имеющих описатели DECIMAL и FIXED, равно 5, для имеющих описатели DECIMAL и FLOAT, равен 6.

Описатель точности должен непосредственно следовать за любым из описателей FIXED, FLOAT, BINARY, DECIMAL, REAL или COMPLEX.

Для строковых переменных применяются описатели типа BIT или CHARACTER (битового или символьного типа соответственно) совместно с описателями длины. Для них может быть также задан описатель VARYING.

Описатель длины имеет вид

(l),

где l – либо скалярное выражение, либо символ * (звёздочка). Этот описатель устанавливает длину (в битах или символах в зависимости от типа строки) для строк с фиксированной длиной, либо максимальную длину для строк с переменной длиной. Описатель длины должен следовать сразу же за описателем BIT или CHARACTER; опущен он быть не может. Описатель VARYING указывает, что строка имеет переменную длину; если он опущен, то считается, что строка имеет постоянную длину. Длина строковых переменных не должна превышать 32767 битов или символов.

Арифметические и символьно-строчные переменные могут быть также описаны с помощью описателя шаблона PICTURE.

В разделе описаний могут задаваться именованные константы. Они представляют собой скалярные величины. В этом случае используется описатель VALUE вместе с описанными ранее атрибутами.

Начальные значения переменных (как арифметических, так и строковых) могут быть объявлены с помощью описателя INITIAL.

Метки-переменные описываются в разделе описаний с помощью атрибута LABEL.

Можно использовать сокращения. Далее перечислены сокращения для тех ключевых слов, которые уже встречались.

PROCEDURE PROC
DECLARE DCL
BINARY BIN
DECIMAL DEC
CHARACTER CHAR
COMPLEX CPLX
GRAPHIC G
INITIAL INIT
WIDECHAR WCHAR
NONVARYING NONVAR
VARYING VAR
VARYINGZ VARZ

1. Declare x real fixed(5,2) decimal;
Эквивалентно
Dcl x real fixed(5,2) dec;

2. Dcl a float(16),b float(16) cplx, float(16) cplx, d float(16) cplx,e float(16);
Эквивалентно
Dcl(a,b cplx, c cplx,d cplx,e)float(16);
Dcl (a,(b,c,d) cplx e) flpat(16);

3. Dcl (a initial(‘abcde’),b initial(‘fg’)) char(5);

4. Dcl a bit(8 init (‘1100’b)

5. Dcl last_nam char(20) varying;

Отправить комментарий

  • Доступны HTML теги: <b> <i> <u> <br> <hr> <div> <span> <code> <pre>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <pli>.

Подробнее о форматировании

   ___    _ 
/ _ \ / |
| (_) | | |
\__, | | |
/_/ |_|
Enter the code depicted in ASCII art style.