Академический Документы
Профессиональный Документы
Культура Документы
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
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
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
-2-
1. ESTRUTURA PADRÃO DE UM PROGRAMA PL/I
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
5. DECLARAÇÕES
-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.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.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,
6. COPY-BOOK (INCLUDE)
SINTAXE
%INCLUDE MAC01 (<nome do COPY-BOOK>);
EX. DCL 1 AGE,
%INCLUDE MAC01 (GEAGEAG);
-8-
8. MANIPULAÇÃO DE ARQUIVO
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;
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
- 11 -
SINTAXE
IF --<condição>-- THEN --<comando>--;
ELSE --<comando>--;
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);
- 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
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);
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 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 -