Вы находитесь на странице: 1из 18

1. ESTRUTURA PADRÃO DE UM PROGRAMA PL/I...................................................................................................................

2. SINTAXE DO COMANDO PL/I......................................................................................................................................................3

3. CARTÃO COMENTÁRIO OBRIGATÓRIO PELA INSTALAÇÃO.........................................................................................3

4. IDENTIFICAÇÃO DO PROGRAMA.............................................................................................................................................4
PROGRAMA PRINCIPAL..................................................................................................................................................................4
SUB-ROTINA INTERNA OU EXTERNA.........................................................................................................................................4
5. DECLARAÇÕES...............................................................................................................................................................................4
5.1. DECLARAÇÃO DE ARQUIVOS................................................................................................................................................4
5.2. DECLARAÇÃO DE CAMPOS....................................................................................................................................................5
5.3. MÁSCARA DE EDIÇÃO PARA CAMPO NUMÉRICO ZONADO (PIC)................................................................................6
5.4. CAMPO NUMÉRICO ZONADO (PIC) COM SINAL................................................................................................................6
5.5. CAMPO DE TAMANHO VARIÁVEL (VARYING)..................................................................................................................7
5.6. ESTRUTURAS.............................................................................................................................................................................7
5.7. DECLARAÇÃO DE ESTRUTURA VIA "LIKE".......................................................................................................................7
5.8. REDEFINIÇÃO............................................................................................................................................................................7
5.9. REDEFINIÇÃO POSICIONAL....................................................................................................................................................8
5.10. IMPORTANTE / CUIDADO......................................................................................................................................................8
6. COPY-BOOK (INCLUDE)...............................................................................................................................................................8

7. TRATAMENTO DE CONDIÇÃO DE EXCEÇÃO (ON CONDITIONS)...................................................................................8

8. MANIPULAÇÃO DE ARQUIVO....................................................................................................................................................9
8.1. ARQUIVO TIPO "RECORD"......................................................................................................................................................9
8.2. ARQUIVO TIPO STREAM-ORIENTED OUTPUT - SYSPRINT.............................................................................................9
9. DESVIO INCONDICIONAL............................................................................................................................................................9

10. ATRIBUIÇÃO................................................................................................................................................................................10

11. EXPRESSÕES E OPERAÇÕES...................................................................................................................................................10


PRIORIDADE DAS EXPRESSÕES.................................................................................................................................................11
PRIORIDADES DOS OPERANDOS................................................................................................................................................11
12. OPERAÇÕES DE COMPARAÇÃO............................................................................................................................................11

13. COMANDO "IF"...........................................................................................................................................................................11

14. COMANDO "SELECT"...............................................................................................................................................................12

15. COMANDO "DO".........................................................................................................................................................................12

16. BLOCOS.........................................................................................................................................................................................13
SEQUÊNCIA DE EXECUÇÃO DOS BLOCOS...............................................................................................................................14
MAPA DE BLOCOS/VARIÁVEIS GLOBAIS E LOCAIS..............................................................................................................14
17. FUNÇÕES - BUILTIN...................................................................................................................................................................15
MULTIPLY(A,B,I,J)..........................................................................................................................................................................15
DIVIDE(A,B,I,J)................................................................................................................................................................................15
MOD...................................................................................................................................................................................................15
VERIFY(A,B)....................................................................................................................................................................................15
-1-
INDEX(A,B)......................................................................................................................................................................................15
SUBSTR(A,B,C)................................................................................................................................................................................15
LENGTH............................................................................................................................................................................................15
HIGH(N).............................................................................................................................................................................................16
LOW(N).............................................................................................................................................................................................16
LBOUND...........................................................................................................................................................................................16
HBOUND...........................................................................................................................................................................................16
PLIRETC............................................................................................................................................................................................16
DATE.................................................................................................................................................................................................16
TIME..................................................................................................................................................................................................16
18. RECURSOS DE DEBUG...............................................................................................................................................................16
SUBSCRIPTRANGE.........................................................................................................................................................................16
CHECK...............................................................................................................................................................................................17
19. PARÂMETROS DE JOB..............................................................................................................................................................17

20. ANEXO I: PARÂMETROS DO COMPILADOR PL/I OPTIMIZING ..................................................................................17

-2-
1. ESTRUTURA PADRÃO DE UM PROGRAMA PL/I

LABEL: PROC OPTIONS (MAIN) ; Identificação do programa


DECLARE arquivos , Declaração de variáveis
campos ,
PICTUREs de edição ,
tabelas ,
estruturas ,
inicializações ,
redefinições ,
funções (BUILT-IN) ,
rotinas externas;
ON CONDITIONS ; Tratamento de condições
COMANDOS ; Comandos / Instruções
movimentações ;
expressões ;
concatenação ;
condições ;
LOOPs ;
manipulação de arquivos ;
manipulação de banco de dados ;
chamadas de rotinas internas;
chamadas de rotinas externas;
COMANDOS ;
ROT-LABEL: PROC ; Identificação da
Sub-rotina interna
END ROT-LABEL ; Finalização da
Sub-rotina interna
END LABEL ; Finalização do programa

2. SINTAXE DO COMANDO PL/I


<instrução> ;
 Qualquer comando / comentário PL/I deverão ser codificados entre as colunas 2 a 72
 O término de qualquer comando PL/I é identificado por ponto e vírgula (;)
 Um comando PL/I poderá ser codificado em uma ou mais linhas
 Não há posição nem caracter para indicar a continuação de um comando PL/I
 O comentário em PL/I deverá estar codificado entre os caracteres "/*" (abre comentário) e os caracteres "*/"
(fecha comentário)
 O comentário PL/I poderá ser condificado em qualquer ponto do fonte e poderá ser de uma ou mais linhas
 Não existem palavras reservadas no PL/I
 O ponto decimal no PL/I é sempre o ponto (.)
 Caracteres minúsculos NÃO são aceitos

3. CARTÃO COMENTÁRIO OBRIGATÓRIO PELA INSTALAÇÃO


Todo e qualquer programa PL/I da instalação deverá ter o seguinte cartão comentário codificado no início do fonte:
2 10 20 60 72
....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
/* PROGRAMA DESCRIÇÃO DO PROGRAMA USERID */
| | |
| | USERID DO ANALISTA
| |
| DESCRIÇÃO SUMÁRIA DO PROGRAMA
-3-
|
NOME DO PROGRAMA
4. IDENTIFICAÇÃO DO PROGRAMA

PROGRAMA PRINCIPAL
label : PROC (parâmetro) OPTIONS (MAIN);
-- PROGRAMA --
END label;
Label: De 1 a 8 caracteres alfanuméricos, iniciando sempre por um caracter alfabético

SUB-ROTINA INTERNA OU EXTERNA


label : PROC (parâmetro);
-- SUB-ROTINA --
END label;
Label: SUB-ROTINA INTERNA: De 1 a 29 caracteres alfanuméricos e caracteres especiais ('#', '@', '$' e
'_'), iniciando sempre por um caracter alfabético
SUB-ROTINA EXTERNA: De 1 a 7 caracteres alfanuméricos, iniciando sempre por um caracter
alfabético

5. DECLARAÇÕES

5.1. DECLARAÇÃO DE ARQUIVOS

DCL <identificação> FILE <tipo> <operação> ENV (<DCB> <opções>);


IDENTIFICAÇÃO
É a mesma identificação (DDNAME) utilizada no cartão DD do JCL
DCL ARQENT FILE ...;
|
|
//ARQENT DD DSN=...
TIPO
 RECORD – arquivo tipo registro
 STREAM – arquivo tipo cadeia
OPERAÇÃO
 INPUT – somente leitura
 OUTPUT – somente gravação
 UPDATE – leitura / atualização
DCB
 Formato do Registro que pode ser:
F – Fixo FB - Fixo Blocado
V – Variável VB - Variável Blocado
 Cláusula RECSIZE – Define-se o tamanho do registro
Ex.: DCL ARQ FILE RECORD INPUT ENV (F RECSIZE(100));
OPÇÕES
 TOTAL – Otimização das rotinas de leitura e gravação
 CTLASA – Indica que o caracter de espacejamento está colocado na primeira posição da linha de impressão.
Caracteres Válidos:
' ' imprime na linha seguinte
'0' salta uma linha
'-' salta duas linhas
'1' salta para a página seguinte
'+' imprime na mesma linha
-4-
Ex.: DCL ARQ FILE RECORD INPUT ENV (F RECSIZE(100) CTLASA
TOTAL);

5.2. DECLARAÇÃO DE CAMPOS


DCL <identificação> <ocorrência> <tipo> (<tamanho><,decimais>)
<alocação> INIT(<inicialização>);
IDENTIFICAÇÃO
 29 caracteres de nome NÃO podendo iniciar por número
 Caracteres alfabéticos (A ~ Z), numéricos (0 ~ 9) e alguns caracteres especiais ('#', '@', '$' e '_')
TIPO
 CHARACTER (CHAR) - alfanumérico
 PICTURE (PIC) – numérico zonado
 DECIMAL FIXED (FIXED) – numérico compactado
 DECIMAL FLOAT (FLOAT) – numérico ponto flutuante
 BINARY FIXED (BIN FIXED) – numérico binário
 POINTER – endereço
TAMANHO
 CHAR – de 1 à 32767
Ex.: CHAR(10)
 PIC – de 1 a 15 (inclusive decimais)
Ex.: PIC '(15)9'
pic '(13)9V99' - 15 dígitos onde 13 inteiras e
2 decimais
 FIXED – de 1 a 15 (inclusive decimais)
Ex.: FIXED(15)
FIXED(15,2) – 15 dígitos onde 13 inteiras e 2 decimais
 FLOAT – de 1 a 33 (não há decimais)
Ex.: FLOAT(06)
 BIN FIXED – 15 (2 bytes) ou 31 (4 bytes) (não há decimais)
Ex.: BIN FIXED(15) / BIN FIXED(31)
Não utilizar para operações de multiplicação e divisão com campos que contenham decimais.
 POINTER – tamanho implicitamente definido (4 bytes)
Ex.: POINTER
 BIT – utilizado para testes lógico / zero (0) é falso e 1 (um) é verdadeiro)
Ex.: BIT(01)
OCORRÊNCIA
Definição de tabela (ARRAY)
 Índices variando de –32766 a 32767
 Unidimensional
Ex.: TAB(10) 10 ocorrências (de 1 a 10)
TAB(-4:10) 15 ocorrências (de –4 a 10 inclusive 0)
 Multidimensional até 9 dimensões
Ex.: TAB(10,10) / TAB(5,5,5)
TAB(-4:10,5,20,10)
ALOCAÇÃO
 Dinâmica: BASED / CONTROLLED
Ex.: CHAR(10) BASED / CHAR(10) CONTROLLED
 Automática: AUTOMATIC
-5-
Ex.: PIC '(10)9' ou PIC '(10)9' AUTOMATIC
 Estática: STATIC
Ex.: FIXED(15) STATIC
 Variável: VARYING (VAR)
Ex.: CHAR(15) VAR
INICIALIZAÇÃO
Cláusula INIT
 Alfanumérico – INIT(' ') / INIT(' ') / INIT((10)' ')
Ex.: CHAR(15) INIT(' ')
 Numérico – INIT(0)
Ex.: FIXED(15) INIT(0) / PIC'(09)9' INIT(12345)
 BIT – INIT('0'B) / INIT('1'B)
Ex.: BIT(1) INIT('0'B) / INIT('1'B)
 Tabela alfanumérica
Ex.: TAB(5) CHAR(15) INIT((5)(01)' ') / INIT((05)(' ')) /
INIT('A','B','C','D','E')
Obs: TAB(5) CHAR(15) INIT((5)(01)' ')
| |
FATOR DE INDEXAÇÃO FATOR DE REPETIÇÃO
 Tabela numérica
Ex.: TAB(5) FIXED(15) INIT((5)0) / INIT(1,2,3,4,5)
Inicialização durante execução: TAB(*) = 0;
 Tabela multidimensional
Ex.: TAB(2,2) FIXED(15) INIT((4)0) / INIT(1,2,3,4)
| | | |
ocorrência (1,1) | | |
ocorrência (1,2) | |
ocorrência (2,1) |
ocorrência (2,2)
Inicialização durante execução: TAB(*,*) = 0;
EXEMPLOS DE DECLARAÇÃO
DCL AGENCIA PIC '(04)9' INIT(0);
DCL NOME_DA_AGENCIA CHAR(45) INIT(' ');
DCL TAB$CONTA(10) FIXED(07) INIT((10)0),
@AGENCIA(10) CHAR(45) INIT((10)('NOME DA AGENCIA'));

5.3. MÁSCARA DE EDIÇÃO PARA CAMPO NUMÉRICO ZONADO (PIC)


PIC '(4)9' ou PIC '9999'
PIC '99/99/99' - 261201 -> 26/12/01
PIC '**.**9,99' - 64930 -> ***649,30
PIC 'ZZ.Z99V,99' - 1649.637 -> 1.649,63
PIC 'ZZ9+' - +37 -> 37+
-37 -> 37
PIC 'ZZ9-' - +37 -> 37
-37 -> 37-
PIC 'ZZ9S' - +37 -> 37+
-37 -> 37-

5.4. CAMPO NUMÉRICO ZONADO (PIC) COM SINAL


 SEM SINAL (valor absoluto)
PIC '(04)9' ou PIC '9999' 1234
|F|1|F|2|F|3|F|4|
-----------------

-6-
 COM SINAL
PIC '(03)9T' ou PIC '999T' 4 dígitos e sinal no último dígito
representado pela letra "T"
Conteúdo : +1234 -1234
|F|1|F|2|F|3|C|4| |F|1|F|2|F|3|B|4|
----------------- -----------------
| |
Sinal Positivo Sinal Negativo

5.5. CAMPO DE TAMANHO VARIÁVEL (VARYING)


Especifica um campo de tamanho variável, embora seja declarado pelo máximo de dígitos que possa conter, ele
assume o tamanho do conteúdo que lhe é atribuído.
EX. X CHAR(10) VAR,
X = 'ABC' -> TAMANHO DE X = 3
X = 'ABCDE' -> TAMANHO DE X = 5
OBS. O tamanho do campo é controlado internamente por um campo BIN FIXED(15) colocado antes do
campo. Este tamanho pode ser acessado através de uma redefinição do campo.
EX. TAM BIN FIXED(15) DEF X,

5.6. ESTRUTURAS
Os sub-níveis devem descrescer mas não necessita ser de modo sequencial
EX. 1 ENTRADA, 1 ENTRADA,
2 AGENCIA PIC '(4)9', 3 AGENCIA PIC'9999',
2 CONTA PIC '(7)9', 3 CONTA PIC'(07)9',
2 NOME CHAR (40), 3 NOME CHAR(40),
2 ENDERECO, 3 ENDERECO,
3 RUA CHAR (30), 5 RUA CHAR(30),
3 NUMERO PIC '(6)9', 5 NUMERO PIC'(06)9',
2 DATA CHAR (6), 3 DATA CHAR(06),

5.7. DECLARAÇÃO DE ESTRUTURA VIA "LIKE"


Usado para declaração de estruturas iguais.
EX. 1 ENTRADA,
2 AGENCIA PIC '(4)9',
2 ENDERECO,
3 RUA CHAR (30),
3 NUMERO PIC '(6)9',
2 DATA CHAR (6),
1 SAIDA LIKE ENTRADA,
A estrutura "SAIDA" terá os mesmos nomes, atributos e inicializações de modo idêntico da estrutura
"ENTRADA".
EX. 1 ENTRADA,
2 AGENCIA PIC '(4)9',
2 ENDERECO,
3 RUA CHAR (30),
3 NUMERO PIC '(6)9',
2 DATA CHAR (6),
1 AUX,
2 CHAVE CHAR (51),
2 END LIKE ENTRADA.ENDERECO,
A sub-estrutura "END" terá os mesmos campos com atributos e inicializações de modo idêntico ao sub-nível
"ENDERECO".

5.8. REDEFINIÇÃO
EX. C_P_F PIC '(12)9'
EX. CPF CHAR (12) DEF C_P_F,
DATA CHAR(06), 1 DATAS,
1 DATAS DEF DATA, 2 DIA PIC '99',
2 DIA PIC '99', 2 MES PIC '99',
-7-
2 MES PIC '99', 2 ANO PIC '99',
2 ANO PIC '99', DATA CHAR(06) DEF DATAS,
EX. 1 CADASTRO,
2 NOME CHAR(45),
2 ENDERECO,
3 RUA CHAR(25),
3 NUMERO PIC '99999',
2 COMPLEMENTO,
RUA_NUMERO CHAR(30) DEF ENDERECO,

5.9. REDEFINIÇÃO POSICIONAL


EX. DATA CHAR(06),
DIA CHAR(02) DEF DATA POS(5),
MES CHAR(02) DEF DATA POS(3),
ANO CHAR(02) DEF DATA POS(1),
EX. AREA CHAR (50),
NOME CHAR (30) DEF AREA POS(11),
EX. 1 CADASTRO,
2 NOME CHAR(45),
2 ENDERECO,
3 RUA CHAR(25),
3 NUMERO PIC '99999',
2 COMPLEMENTO,
RUA_NUMERO CHAR(30) DEF CADASTRO POS(46),

5.10. IMPORTANTE / CUIDADO


Toda e qualquer variável não declarada explicitamente no programa, o PL/I irá assumir (declarar) implicitamente
de acordo com a seguinte regra: Toda variável iniciada pela letra "I" a "N" será assumido como sendo "BIN
FIXED(15),e as outras serão assumidas como "FLOAT(6)".

6. COPY-BOOK (INCLUDE)
SINTAXE
%INCLUDE MAC01 (<nome do COPY-BOOK>);
EX. DCL 1 AGE,
%INCLUDE MAC01 (GEAGEAG);

7. TRATAMENTO DE CONDIÇÃO DE EXCEÇÃO (ON conditions)


Devem ser condificados preferencialmente após as declarações de variáveis e antes de qualquer comando
executável. Pois o tratamento de condição de exceção só é ativado quando o fluxo da execução passar pelas
instruções ON condition. As instruções incorporadas nos comando ON condition serão executadas somente
quando ocorrer a condição de exceção.
ON ENDFILE
Prevê condição para fim de arquivo.
EX. ON ENDFILE (ARQUIVO) --COMANDO-- ;
EX. ON ENDFILE (ARQUIVO) BEGIN;
--COMANDOS--;
END;
ON ERROR
Prevê condição para qualquer tipo de ABEND.
EX. ON ERROR SNAP BEGIN;
ON ERROR SYSTEM;
--COMANDOS--;
CALL ABEND;
END;

-8-
8. MANIPULAÇÃO DE ARQUIVO

8.1. ARQUIVO TIPO "RECORD"


ABRIR/FECHAR
OPEN FILE (ARQUIVO1);
OPEN FILE (ARQUIVO1), FILE (ARQUIVO2);
CLOSE FILE (ARQUIVO1);
CLOSE FILE (ARQUIVO1), FILE (ARQUIVO2);
LEITURA
READ FILE (ENTRADA) INTO (AREA);
READ FILE (ENTRADA) SET (P); (usado para leitura de áreas BASED)
GRAVAÇÃO
WRITE FILE (SAIDA) FROM (AREA);

8.2. ARQUIVO TIPO STREAM-ORIENTED OUTPUT - SYSPRINT


GRAVAÇÃO
PUT DATA------Imprime o nome e o conteúdo do campo
EX. PUT DATA (NOME,VALOR);
DADOS: NOME = 'JOAO', VALOR = 339
EX. PUT DATA;
CUIDADO: Serão listados todos os nomes e conteúdos de todos os campos do
programa
PUT LIST--------Imprime somente o conteúdo do campo
EX. PUT LIST (NOME,VALOR);
RESULTADO: JOAO 339
PUT EDIT-------Imprime campos e literais
EX. PUT LIST (NOME,VALOR);
RESULTADO: JOAO 339
EX. PUT EDIT (NOME,'PAGOU',VALOR)
(X(5),A(25),A(10),P'Z9.9');
| | |
| | NUMERO
| CARACTER
|
BRANCOS
---> JOAO CARLOS ARRUDA PAGOU 83.4
Opções de espacejamento de impressão válida para todos os tipos acima
SKIP Mudança de linha
SKIP(n) Salta "n" linhas
COL(n) Salta "n" colunas
PAGE Mudança de página
EX. PUT SKIP LIST(NOME,VALOR);
PUT PAGE EDIT(NOME,VALOR)(A(20),SKIP(2),P'ZZZV,9');

9. DESVIO INCONDICIONAL
Comando para fazer um desvio do fluxo de execução para um LABEL qualquer especificado no comando.
GO TO <LABEL>;
EX. IF CNT > 10 THEN
GO TO ULTRAPASSOU_LIMITE;
...
-9-
...
ULTRAPASSOU_LIMITE: --COMANDOS—

10. ATRIBUIÇÃO
ATRIBUIÇÃO SIMPLES
CAMPO = VALOR;
ATRIBUIÇÃO MÚLTIPLA
PAG, NPAG = NPAG + 1;
ATRIBUIÇÃO POR IGUALDADE DE NOME (opção BY NAME)
Movimentação das variáveis de uma estrutura para outra que possuam os mesmos nomes de variáveis
SAIDA = VALOR, BY NAME;
ATRIBUIÇÃO POR QUALIFICAÇÃO DE NOME
Movimentação de variáveis que possuem o mesmo nome em estruturas ou níveis diferentes.
SAIDA.VALOR = ENTRADA.VALOR * 100;

11. EXPRESSÕES E OPERAÇÕES

OPERANDOS ARITMÉTICOS:
Exponenciação: **
Ex: A = A ** 3
Multiplicação: *
Ex: A = B * C
Divisão: /
Ex: A = B / C
Infixo: +, -
Prefixo: +, -
Concatenação: ||
Ex: A = 'AB', B = 'CD', C = A || B
C = 'ABCD'

OPERANDOS DE COMPARAÇÃO:
Igual: =
Ex: IF A = 0 THEN
Negativa: ¬
Ex: IF ¬(A = 0) THEN
BIT STRING: DCL FIMARQ BIT(01) INIT('0'B);
IF ¬FIMARQ THEN
Diferente: ¬=
Ex: IF A ¬= 0 THEN
Maior que: >
Ex: IF A > 0 THEN
Menor que: <
Ex: IF A < 0 THEN
Maior igual que: >=
Ex: IF A >= 0 THEN
Menor igual que: <=
Ex: IF A <= 0 THEN
Não maior que: ¬>
Ex: IF A ¬> 0 THEN
Não menor que: ¬<
Ex: IF A ¬< 0 THEN

- 10 -
E (AND): &
Ex: IF A = 0 & B = 0 THEN
Ou (OR): |
Ex: IF A = 0 | B = 0 THEN

PRIORIDADE DAS EXPRESSÕES


1. Expressões entre parênteses
2. Prioridade dos operandos
3. Dentro da mesma prioridade da esquerda para a direita

PRIORIDADES DOS OPERANDOS


1. **, ¬, +(PREFIXO), -(PREFIXO)
2. *, /
3. +(INFIXO), -(INFIXO)
4. ||
5. >, >=, =, ¬=, <=, <, ¬>, ¬<
6. &
7. |

Exemplo: B | C & D -> B | (C & D)


¬B | C -> ¬(B | C)
TABELA DE RESULTADO BOOLEANO
A B ¬A ¬B A&B A|B
1 1 0 0 1 1
1 0 0 1 0 1
0 1 1 0 0 1
0 0 1 1 0 0

12. OPERAÇÕES DE COMPARAÇÃO


As operações de comparações são feitas da esquerda para a direita BIT a BIT.
COMPARAÇÃO ENTRE CHARACTER
A comparação é feita da esquerda para a direita, sendo um caracter dos operandos menor que o outro o campo é
preenchido à direita com brancos para comparação.
COMPARAÇÃO ENTRE BIT STRING
A comparação é feita da esquerda para a direita com dígitos binários, sendo um dos operandos menor o campo é
preenchido à direita com zeros binários.
COMPARAÇÃO NUMÉRICAS
A comparação é feita pelo valor númerico dos operandos.

13. COMANDO "IF"


Comando para comparação e tomada de ação de acordo com a veracidade da condição. (THEN – verdade /
ELSE – falso).

- 11 -
SINTAXE
IF --<condição>-- THEN --<comando>--;
ELSE --<comando>--;

14. COMANDO "SELECT"


Comando de tomada de decisão e ação em uma estrutura de "CASE" de acordo com o valor ou a veracidade da
condição. (verdade executa / falso testa o próximo valor ou condição).
SINTAXE
SELECT (<campo>);
WHEN (<valor> ou <condição>) --<comando>--;
...
WHEN (<valor> ou <condição>) --<comando>--;
OTHERWISE --<comando>--;
END;
EXEMPLO
SELECT (A);
WHEN (1,2) B = A * 2; Executa se A = 1 ou A = 2
WHEN (3) B = A / 2; Executa se A = 3
OTHERWISE B = 0; Executa se A <= 0 ou A > 3
END;
SELECT;
WHEN (A = 1 | A = 2) B = A * 2;
WHEN (A = 3) B = A / 2;
OTHERWISE B = 0;
END;

15. COMANDO "DO"


AGRUPAMENTO
IF --CONDICAO—- THEN
DO;
--COMANDOS--;
END;
ELSE
DO;
--COMANDOS--;
END;
SELECT
WHEN (...) DO;
--COMANDOS--;
END;
...
OTHERWISE DO;
--COMANDOS--;
END;
END;

REPETITIVO
Executa as instruções várias vezes quanto definido no limite de repetição especificado no comando onde a
variável de controle de repetição é incrementado de acordo com o valor de incremento definido também no
comando. O valor de incremento quando não é especificado assume-se o valor 1.
DO I = 0 TO 10 BY 2; Executa 6 vezes com iteração de 2
--COMANDOS--; unidades
END;

- 12 -
VARIAVEL
Executa as instruções várias vezes quantas definidas pela quantidade de valores de atribuição
especificados no comando.
DO I = 1,7,9,5,11;
--COMANDOS--;
END;
CONDICIONAL WHILE
Executa os comandos enquanto a condição especificada no comando for verdadeira.
DO WHILE (--CONDICAO--);
--COMANDOS--;
END;

CONDICIONAL UNTIL
Executa as instruções até que a condição especificada no comando se torne verdadeira. Executa ao
menos uma vez, pois o teste de validação da condição é feita no final.
DO UNTIL (--CONDICAO--);
--COMANDOS--;
END;
CONDICIONAL MISTO
Combinações dos processos repetitivos descritos anteriormente.
DO COD = 1 TO 10 WHILE (--CONDICAO--);
--COMANDOS--;
END;

16. BLOCOS
São conjuntos de comandos em PL/I que servem para informar ao compilador a necessidade de tratamento
especial durante a compilação, além da simples tradução dos comandos que contém.
Os blocos dão à linguagem a característica de se poder fazer alocação dinâmica de memõria. As variáveis
alocadas no início da execução ou ativação de um bloco são desalocadas ao seu término.
Existem dois tipos de bloco: "PROCEDURE" e "BEGIN".
BEGIN
O nome (rótulo/LABEL) para estes tipo de blocos é opcional pois são ativados na sequência que
aparecem no programa.
PROCEDURE
Todo programa é composto de pelo menos 1 bloco "PROCEDURE", o bloco principal (a MAIN
PROCEDURE).
Obrigatoriamente estes blocos devem ter nome (rótulo/LABEL) para poderem ser ativados. Os blocos que
não sejam o bloco principal são mais conhecidos como sendo uma sub-rotina interna.
Este tipo de bloco pode haver definições de variáveis locais e de manipulação de parâmetros.
A execução destes blocos são feitos através do comando "CALL". Logo estes blocos não precisam ser
"SALTADOS" pela lógica do programa para atingir o final do programa.
CHAMADA DE SUB-ROTINA INTERNA
Sem parâmetros: CALL SUB_ROTINA_INTERNA;
Com parâmetros: CALL SUB_ROTINA_INTERNA(PARM1,PARM2,PARM3);
CHAMADA DE SUB-ROTINA EXTERNA
Sem parâmetros: CALL SUBROT1;
Com parâmetros: CALL SUBROT2(PARM1,PARM2,PARM3);
RECEPÇÃO DE PARÂMETROS
SUBROT1: PROC(PARM1,PARM2,PARM3);
DCL PARM1 CHAR(10),
PARM2 PIC'9999',
PARM3 FIXED(15,2);
Recomenda-se a utilização de estrutura como passagem de parâmetros, ver abaixo:
- 13 -
SUBROT1: PROC(PARMAMETRO);
DCL 1 PARAMETRO,
2 PARM1 CHAR(10),
2 PARM2 PIC'9999',
2 PARM3 FIXED(15,2);

SEQUÊNCIA DE EXECUÇÃO DOS BLOCOS


ORDEM DE PROG: PROCEDURE OPTIONS (MAIN);
EXECUCAO DCL (A,B) ....
01 .
02 CALL PROCESSO;
05 .
06 BLOCO_1: BEGIN;
DCL V(10000) ....
07 .
END;
08 .
09 BEGIN;
10 .
END;
11 .
03 PROCESSO: PROCEDURE;
DCL (X,Y,MAT)....
04 .
END PROCESSO;
12 END PROG;

MAPA DE BLOCOS/VARIÁVEIS GLOBAIS E LOCAIS


+----------------------------------------------------------------+
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| P1 OPTIONS (MAIN) V1 ||||||||||||||||||||||||||||||||||||
||||||||+--------------------------------------------------+||||||
||||||||| P11 V11 |||||||
||||||||| +----------------------------------------+ |||||||
||||||||| | P111 V111 |||||||||||||||||||||||||||| |||||||
||||||||| +----------------------------------------+ |||||||
||||||||| |||||||
||||||||+--------------------------------------------------+||||||
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||||||||+--------------------------------------------------+||||||
||||||||| P12 V12 |||||||
||||||||| +----------------------------------------+ |||||||
||||||||| | P121 V121 |||||||||||||||||||||||||||| |||||||
||||||||| +----------------------------------------+ |||||||
||||||||| |||||||
||||||||+--------------------------------------------------+||||||
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+----------------------------------------------------------------+
P --> BLOCOS PROCEDURE
V --> VARIAVEIS
QUEM CHAMA QUEM: P1 : P11 P12 P1
P11 : P111 P12 P11
P111 : P12 P11 P111
P12 : P121 P11 P12
P121 : P12 P11 P121
QUEM USA QUEM: P1 : V1
P11 : V1 V11
P111 : V1 V11 V111
P12 : V1 V12
P121 : V1 V12 V121

- 14 -
17. FUNÇÕES - BUILTIN

ARITMÉTICAS

MULTIPLY(A,B,I,J)
Fornece o resultado da multiplicação entre "A" e "B" com a precisão de cálculo interno de "I" dígitos com "J"
decimais
EX. RESULTADO = MULTIPLY(NUMERO1,NUMERO2,15,5);

DIVIDE(A,B,I,J)
Fornece o resultado da divisão entre "A" e "B" com a precisão de cálculo interno de "I" dígitos com "J" decimais
EX. RESULTADO = DIVIDE(NUMERO1,NUMERO2,15,5);

MOD
Fornece o resto de uma divisão.
EX. RESTO = MOD(NUMERO,DIVISOR);
IF MOD(ANO,4) = 0 THEN MENSAGEM = 'ANO BISSEXTO';

ROUND
ROUND(X1,X2) retorna o valor arredondado de X1, X2 indicando em qual casa a direita será efetuado o
arredondamento

TRATAMENTO DE STRING

VERIFY(A,B)
Retorna a posição no STRING "A" do primeiro caracter ou BIT que não está no STRING "B". Se todos os
caracteres em "A" estão em "B" o resultado é zero.
EX. X = VERIFY(CAMPO,'ABHNR');
SE CAMPO = 'BRANCO' -> X = 5
SE CAMPO = 'BANHA' -> X = 0
IF VERIFY(NUM,'0123456789') ¬= 0 THEN
MENSAGEM = 'NUM NAO NUMERICO';

INDEX(A,B)
Retorna a posição inicial do STRING "B" dentro do STRING "A", retorna zero se o mesmo não está presente.
EX. DCL LETRA CHAR(10) INIT('ABCDEFGHI'),
X = INDEX(LETRA,'E') -> X = 5
Y = INDEX(LETRA,'DE') -> Y = 4

SUBSTR(A,B,C)
A - CAMPO
B - POSIÇÃO INICIAL
C - QUANTIDADE DE DÍGITOS
Permite o acesso a uma parte de um campo para exame ou modificação do seu conteúdo. Se "C" é omitido o
resto do STRING é incluído.
EX. DCL CAMPO CHAR(10) INIT('012345ABCD'),
SUBSTR(CAMPO,5,3) = 'XYZ'; --> CAMPO = 01234XYZBCD

LENGTH
LENGTH (X1) retorna um valor igual ao comprimento de X1.

- 15 -
HIGH(N)
Retorna um caracter STRING de tamanho n com o caracter de mais alto valor em hexadecimal "FF".
EX. DCL CAMPO CHAR (06),
CAMPO = HIGH(06);

LOW(N)
Retorna um caracter STRING de tamanho n com o caracter de mais baixo valor em hexadecimal "00".
EX. DCL CAMPO CHAR (06),
CAMPO = LOW(06);

TRATAMENTO DE ARRAYS

LBOUND
LBOUND (X1,N) retorna o valor de limite inferior da "N-esima" dimensao do "array" especificado como
argumento

HBOUND
HBOUND (X1,N) retorna o valor de limite superior da "N-esima" dimensao do "array" especificado como
argumento.

OUTROS

PLIRETC
Permite ao programa passar um código de retorno para os cartões de controle. Seta o "COND CODE" do STEP
do JOB com o valor especificado.
EX. DCL COND BIN FIXED(31) STATIC INIT(0),
IF --CONDICAO-- THEN COND = 1;
ELSE COND = 2;
CALL PLIRETC (COND);

DATE
Fornece a data do dia no formato ano-mês-dia (CHAR(06) - AAMMDD).
EX. DCL DATA CHAR(06),
DATE BUILTIN;
DATA = DATE; ---> DATA = 010227

TIME
Fornece o horário no formato hora-minuto-segundo-milésimo de segundo (CHAR(09) - HHMMSSMMM).
EX. DCL HORA CHAR(09),
TIME BUILTIN;
HORA = TIME; ---> HORA = 091033683

18. RECURSOS DE DEBUG

SUBSCRIPTRANGE
Usado para verificar se houve estouro de alguma tabela dentro do programa, quando detectado a invasão de
área a execução é interrompida.
EX. /* PROGRAM PROGRAMA EXEMPLO USERID */
(SUBRG):
DICONS: PROC OPTIONS (MAIN);
----
ON SUBRG BEGIN;
PUT DATA (I,J,K);
----
END;

- 16 -
CHECK
Controla variáveis do programa, listando-as a cada execução de instruções onde elas aparecem.
EX. /* PROGRAMA PROGRAMA EXEMPLO USERID */
(CHECK):
FCINTRV: PROC OPTIONS (MAIN);
/* PROGRAMA PROGRAMA EXEMPLO USERID */
(CHECK(FATOR,TAXA,RAZAO)):
ABTOTS: PROC OPTIONS (MAIN);

19. PARÂMETROS DE JOB


São informações passadas ao programa através do cartão JCL "EXEC" através de da opção "PARM"
O parâmetro no JCL deverá ser informado como mostrado no exemplo seguinte:
PRODUÇÃO
// EXEC PGM=PROGRAMA,PARM='ISA(100)K,STAE,SPIE/<parâmetros>'
|
V
O PARAMETRO DEVERÁ SER INFORMADO AQUI
DESENVOLVIMENTO
// EXEC ADGO,MEMBER=PROGRAMA,NBIBL=00,PARAM='<parâmetros>'
|
V
O PARAMETRO DEVERÁ SER INFORMADO AQUI
No programa deverá estar codifica como mostrado a seguir, sendo o parâmetro declarado obrigatoriamente
como VARYING. O tamanho máximo de parâmetro que pode ser enviado do JOB para a aplicação é de 100
bytes.
PROGRAMA: PROC (PARAMETRO) OPTIONS (MAIN);
DCL PARAMETRO CHAR (10) VAR,
1 PARM_DEF DEF PARAMETRO,
2 TAMANHO BIN FIXED(15),
2 CAMPO CHAR (10);
...
IF TAMANHO = 0 THEN ... /* faltou passar parâmetro */
ELSE
IF CAMPO = 'PARAMETRO1' THEN
...

20. Anexo I: Parâmetros do Compilador PL/I Optimizing

Parametros mais usados

O compilador PL/I OPTIMIZING fornece uma serie de opcoes, tanto em tempo de compilacao como em tempo de execucao. As
opcoes que sao fornecidas em tempo de compilacao sao chamadas de "opcoes de compilacao" e aquelas fornecidas em tempo de
execucao, "opcoes em tempo de execucao".

As opcoes mais utilizadas sao as seguintes:


AGGREGATE indica ao compilador para listar ( AG) ou nao (NAG) a relacao das estruturas
(NOGGREGATE) principais e tabelas do programa, bem como seus respectivos tamanhos.
o compilador produz no objeto, codigo que a tempo de execucao conta e lista ao fim
COUNT (NOCOUNT)
do programa quantas vezes a instrucao foi executada.
o compilador produz no objeto, codigo que ao termino do programa lista os ultimos
FLOW (NOFLOW) "n" desvios executados nas ultimas "m" procedures.
Formato: FLOW (n,m) - default p/ (n,m) e' (25,10)
GOSTMT especifica que o numero da instrucao no programa fonte deve ser incluido em
(NOGOSTMT) mensagens enviadas em tempo de execucao.
INCLUDE permite ao compilador o uso de texto em programas que usam a instrucao
- 17 -
"%INCLUDE". Para programas que utilizam esta instrucao e nao utilizam outras
instrucoes do "pre-processador", este metodo e' mais rapido que utilizando o "pre-
(NINCLUDE) processador". Se a opcao MACRO for tambem utilizada, a opcao INCLUDE nao tem
efeito.
Abreviacao: INC e NOINC
informa ao compilador para incluir uma lista do programa fonte (inclusive instrucoes
INSOURCE
do "pre-processador") na listagem da compilacao.
(NOINSOURCE)
Abreviacao: IS ou NIS
INTERRUPT PL/I intervem (INT) ou nao (NOINT) em caso de ABEND. Quando intervem, devolve
(NOINTERRUPT) o "system code" correspondente. Quando se deseja o DUMP, utilizar NOINT.
indica o tamanho da area ISA (Initial Storage Area), onde serao alocadas as "SAVE
ISASIZE
AREAS", "AREAS AUTOMATICAS" e "AREAS CONTROLLED".
indica ao compilador para incluir uma listagem do modulo objeto, em ASSEMBLER.
LIST (NOLIST)
especifica que o programa fonte deve ser processado pelo "pre-processador".
MACRO (NOMACRO)
Formatos: MACRO=M ou NOMACRO (abreviaturas: M ou NM)
indica ao compilador para produzir uma tabela de "off sets" (localizacao das
MAP (NOMAP) variaveis) das areas "static" e "automatic" do programa. Nao sao mostradas as areas
com atributo "DEF".
REPORT especifica que um relatorio da utilizacao de memoria pelo programa sera' gerado e
(NOREPORT) listado no PLIDUMP ou PL1DUMP. Util para a determinacao do ISASIZE ideal.
especifica que quando ocorrer uma interrupcao de programa (OC1,...,OCF), as
SPIE (NOSPIE)
rotinas do PL/I devem interceptar, e em certas circunstancias, dar condicao ERROR
especifica que quando ocorrer um ABEND (programado), as rotinas do PL/I devem
STAE (NOSTAE) interceptar e dar condicao ERROR ou produzir mensagem de diagnostico e um
PLIDUMP.
OFFSET imprime ou nao os "off sets" das instrucoes e procedures dentro do programa.
(NOOFFSET)
XREF (NOXREF) indica para incluir lista de referencia cruzada de variaveis (onde sao declaradas e
(SHORT|FULL) em que instrucoes sao usadas).

As "opcoes de execucao" sao: COUNT (NOCOUNT), FLOW (NOFLOW), ISASIZE, REPORT (NOREPORT), SPIE
(NOSPIE), STAE (NOSTAE).

BIBLIOGRAFIA
OS PL/I OPTIMIZING COMPILER: Programmer's Guide (Chapter 4 - The Compiler)
OS PL/I Checkout and Optimizing Compilers: Language Reference Manual (Section G: Built-in Functions and
Pseudovariables)

- 18 -

Вам также может понравиться