22
1. ESTRUTURA PADRÃO DE UM PROGRAMA PL/I……….............................................3 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...........................................7 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.....................................................................8 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...............................................................10 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".......................................................................12 14. COMANDO "SELECT"...................................................................12 15. COMANDO "DO".......................................................................12 16. BLOCOS.............................................................................13 - 1 -

Manual de PL1 - Basico

  • Upload
    liags

  • View
    324

  • Download
    42

Embed Size (px)

DESCRIPTION

PL/I ("Programming Language One", ) is a procedural

Citation preview

Page 1: Manual de PL1 - Basico

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

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............................................................................................................................................... 4SUB-ROTINA INTERNA OU EXTERNA......................................................................................................................... 4

5. DECLARAÇÕES......................................................................................................................................................... 4

5.1. DECLARAÇÃO DE ARQUIVOS.............................................................................................................................. 45.2. DECLARAÇÃO DE CAMPOS.................................................................................................................................. 55.3. MÁSCARA DE EDIÇÃO PARA CAMPO NUMÉRICO ZONADO (PIC)....................................................................65.4. CAMPO NUMÉRICO ZONADO (PIC) COM SINAL.................................................................................................75.5. CAMPO DE TAMANHO VARIÁVEL (VARYING).....................................................................................................75.6. ESTRUTURAS......................................................................................................................................................... 75.7. DECLARAÇÃO DE ESTRUTURA VIA "LIKE".........................................................................................................75.8. REDEFINIÇÃO........................................................................................................................................................ 85.9. REDEFINIÇÃO POSICIONAL.................................................................................................................................. 85.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".................................................................................................................................... 98.2. ARQUIVO TIPO STREAM-ORIENTED OUTPUT - SYSPRINT...............................................................................9

9. DESVIO INCONDICIONAL....................................................................................................................................... 10

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

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

PRIORIDADE DAS EXPRESSÕES.............................................................................................................................. 11PRIORIDADES DOS OPERANDOS............................................................................................................................. 11

12. OPERAÇÕES DE COMPARAÇÃO.......................................................................................................................... 11

13. COMANDO "IF"........................................................................................................................................................ 12

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

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

16. BLOCOS................................................................................................................................................................... 13

SEQUÊNCIA DE EXECUÇÃO DOS BLOCOS.............................................................................................................14MAPA DE BLOCOS/VARIÁVEIS GLOBAIS E LOCAIS................................................................................................14

17. FUNÇÕES - BUILTIN................................................................................................................................................ 15

MULTIPLY(A,B,I,J)....................................................................................................................................................... 15DIVIDE(A,B,I,J)............................................................................................................................................................. 15MOD............................................................................................................................................................................. 15VERIFY(A,B)................................................................................................................................................................. 15

- 1 -

Page 2: Manual de PL1 - Basico

INDEX(A,B)................................................................................................................................................................... 16SUBSTR(A,B,C)............................................................................................................................................................ 16LENGTH....................................................................................................................................................................... 16HIGH(N)........................................................................................................................................................................ 16LOW(N)......................................................................................................................................................................... 16LBOUND....................................................................................................................................................................... 16HBOUND...................................................................................................................................................................... 16PLIRETC....................................................................................................................................................................... 16DATE............................................................................................................................................................................ 16TIME............................................................................................................................................................................. 17

18. RECURSOS DE DEBUG.......................................................................................................................................... 17

SUBSCRIPTRANGE..................................................................................................................................................... 17CHECK......................................................................................................................................................................... 17

19. PARÂMETROS DE JOB........................................................................................................................................... 17

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

- 2 -

Page 3: Manual de PL1 - Basico

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 -

Page 4: Manual de PL1 - Basico

| 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 JCLDCL 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 BlocadoV – Variável VB - Variável Blocado

Cláusula RECSIZE – Define-se o tamanho do registroEx.: 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 -

Page 5: Manual de PL1 - Basico

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 à 32767Ex.: 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

UnidimensionalEx.: 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õesEx.: TAB(10,10) / TAB(5,5,5) TAB(-4:10,5,20,10)

ALOCAÇÃO

Dinâmica: BASED / CONTROLLEDEx.: CHAR(10) BASED / CHAR(10) CONTROLLED

Automática: AUTOMATICEx.: PIC '(10)9' ou PIC '(10)9' AUTOMATIC

- 5 -

Page 6: Manual de PL1 - Basico

Estática: STATICEx.: 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éricaEx.: 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éricaEx.: TAB(5) FIXED(15) INIT((5)0) / INIT(1,2,3,4,5)

Inicialização durante execução: TAB(*) = 0;

Tabela multidimensionalEx.: 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ÇÃODCL 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/01PIC '**.**9,99' - 64930 -> ***649,30PIC 'ZZ.Z99V,99' - 1649.637 -> 1.649,63PIC 'ZZ9+' - +37 -> 37+ -37 -> 37PIC '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| -----------------

COM SINALPIC '(03)9T' ou PIC '999T' 4 dígitos e sinal no último dígito

- 6 -

Page 7: Manual de PL1 - Basico

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 sequencialEX. 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ÇÃOEX. 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', 2 MES PIC '99', 2 ANO PIC '99', 2 ANO PIC '99', DATA CHAR(06) DEF DATAS,

- 7 -

Page 8: Manual de PL1 - Basico

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 POSICIONALEX. 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 -

Page 9: Manual de PL1 - Basico

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 campoEX. 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 campoEX. PUT LIST (NOME,VALOR);

RESULTADO: JOAO 339

PUT EDIT-------Imprime campos e literaisEX. 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 -

Page 10: Manual de PL1 - Basico

...

ULTRAPASSOU_LIMITE: --COMANDOS—

10. ATRIBUIÇÃO

ATRIBUIÇÃO SIMPLESCAMPO = VALOR;

ATRIBUIÇÃO MÚLTIPLAPAG, 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áveisSAIDA = 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 -

Page 11: Manual de PL1 - Basico

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 BOOLEANOA B ¬A ¬B A&B A|B1 1 0 0 1 11 0 0 1 0 10 1 1 0 0 10 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 -

Page 12: Manual de PL1 - Basico

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).

SINTAXESELECT (<campo>); WHEN (<valor> ou <condição>) --<comando>--; ... WHEN (<valor> ou <condição>) --<comando>--; OTHERWISE --<comando>--;END;

EXEMPLOSELECT (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 > 3END;

SELECT; WHEN (A = 1 | A = 2) B = A * 2; WHEN (A = 3) B = A / 2; OTHERWISE B = 0;END;

15. COMANDO "DO"

AGRUPAMENTOIF --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--; unidadesEND;

- 12 -

Page 13: Manual de PL1 - Basico

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 INTERNASem parâmetros: CALL SUB_ROTINA_INTERNA;Com parâmetros: CALL SUB_ROTINA_INTERNA(PARM1,PARM2,PARM3);

CHAMADA DE SUB-ROTINA EXTERNASem parâmetros: CALL SUBROT1;Com parâmetros: CALL SUBROT2(PARM1,PARM2,PARM3);

RECEPÇÃO DE PARÂMETROSSUBROT1: 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 -

Page 14: Manual de PL1 - Basico

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 BLOCOSORDEM 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 PROCEDUREV --> 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 -

Page 15: Manual de PL1 - Basico

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" decimaisEX. 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" decimaisEX. 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';

ROUNDROUND(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 - CAMPOB - POSIÇÃO INICIALC - 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

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

- 15 -

Page 16: Manual de PL1 - Basico

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

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

HBOUNDHBOUND (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 -

Page 17: Manual de PL1 - Basico

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 (NOGGREGATE)

indica ao compilador para listar ( AG) ou nao (NAG) a relacao das estruturas principais e tabelas do programa, bem como seus respectivos tamanhos.

COUNT (NOCOUNT) o compilador produz no objeto, codigo que a tempo de execucao conta e lista ao fim do programa quantas vezes a instrucao foi executada.

FLOW (NOFLOW) o compilador produz no objeto, codigo que ao termino do programa lista os ultimos "n" desvios executados nas ultimas "m" procedures. Formato: FLOW (n,m) - default p/ (n,m) e' (25,10)

GOSTMT (NOGOSTMT)

especifica que o numero da instrucao no programa fonte deve ser incluido em mensagens enviadas em tempo de execucao.

INCLUDE permite ao compilador o uso de texto em programas que usam a instrucao

- 17 -

Page 18: Manual de PL1 - Basico

(NINCLUDE)

"%INCLUDE". Para programas que utilizam esta instrucao e nao utilizam outras instrucoes do "pre-processador", este metodo e' mais rapido que utilizando o "pre-processador". Se a opcao MACRO for tambem utilizada, a opcao INCLUDE nao tem efeito.Abreviacao: INC e NOINC

INSOURCE (NOINSOURCE)

informa ao compilador para incluir uma lista do programa fonte (inclusive instrucoes do "pre-processador") na listagem da compilacao. Abreviacao: IS ou NIS

INTERRUPT (NOINTERRUPT)

PL/I intervem (INT) ou nao (NOINT) em caso de ABEND. Quando intervem, devolve o "system code" correspondente. Quando se deseja o DUMP, utilizar NOINT.

ISASIZE indica o tamanho da area ISA (Initial Storage Area), onde serao alocadas as "SAVE AREAS", "AREAS AUTOMATICAS" e "AREAS CONTROLLED".

LIST (NOLIST) indica ao compilador para incluir uma listagem do modulo objeto, em ASSEMBLER.

MACRO (NOMACRO) especifica que o programa fonte deve ser processado pelo "pre-processador".Formatos: MACRO=M ou NOMACRO (abreviaturas: M ou NM)

MAP (NOMAP) indica ao compilador para produzir uma tabela de "off sets" (localizacao das variaveis) das areas "static" e "automatic" do programa. Nao sao mostradas as areas com atributo "DEF".

REPORT (NOREPORT)

especifica que um relatorio da utilizacao de memoria pelo programa sera' gerado e listado no PLIDUMP ou PL1DUMP. Util para a determinacao do ISASIZE ideal.

SPIE (NOSPIE) especifica que quando ocorrer uma interrupcao de programa (OC1,...,OCF), as rotinas do PL/I devem interceptar, e em certas circunstancias, dar condicao ERROR

STAE (NOSTAE) especifica que quando ocorrer um ABEND (programado), as rotinas do PL/I devem interceptar e dar condicao ERROR ou produzir mensagem de diagnostico e um PLIDUMP.

OFFSET (NOOFFSET)

imprime ou nao os "off sets" das instrucoes e procedures dentro do programa.

XREF (NOXREF) (SHORT|FULL)

indica para incluir lista de referencia cruzada de variaveis (onde sao declaradas e 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 -