PL/I
PL/I | |
---|---|
Surgido em | 1964 |
Criado por | IBM e o comitê de desenvolvimento de linguagens de programação SHARE |
Estilo de tipagem | procedural, imperativa, estruturada |
Influenciada por | COBOL, Fortran, ALGOL |
Influenciou | SP/k, B, REXX, AS/400 Linguagem controle |
PL/I (alternativamente PL/1, lê-se pê-ele-um) significa Programming Language One e é uma linguagem de programação desenvolvida pela IBM em meados de 1960. A previsão da IBM era que a linguagem fosse utilizada em ciências, inteligência artificial e negócios. Por um período de tempo foi a principal linguagem ensinada na Universidade de Michigan Dearborn. Entretanto, a popularidade declinou nos anos recentes, devido à introdução de línguagens de programação mais modernas voltadas para o ambiente Mainframe.
Sua principal função é o processamento/manipulação de dados; suporta recursão e alocação dinâmica.[1]
Principais características
[editar | editar código-fonte]- Linguagem de programação imperativa e estruturada, de controle e recursividade do ALGOL 60
- Fortemente tipada
- Subprogramas e E/S formatadas do FORTRAN
- Manipulação de arquivos e registros do COBOL
- Alocação dinâmica de memória e estruturas encadeadas do LISP
- Operações de arrays do APL
Contribuições de PL/I para futuras linguagens
[editar | editar código-fonte]- Tratamento de interrupção - execução de procedimentos específicos quando uma condição excepcional ocorre
- Multitarefa - especificação de tarefas que podem ser executadas concorrentemente
Sintaxe do comando PL/I
[editar | editar código-fonte]<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 (.)
Estrutura padrão
[editar | editar código-fonte]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
Operadores de comparação
[editar | editar código-fonte]= Igual ^= diferente > maior >= maior ou igual < menor <= menor ou igual
COMANDO "SELECT"
[editar | editar código-fonte]SELECT (<campo>); WHEN (<valor> ou <condição>) --<comando>--; ... WHEN (<valor> ou <condição>) --<comando>--; OTHERWISE --<comando>--; END;
COMANDO "IF"
[editar | editar código-fonte]IF --<condição>-- THEN --<comando>--; ELSE --<comando>--;
COMANDO "WHILE"
[editar | editar código-fonte]DO WHILE (--CONDICAO--); --COMANDOS--; END;
Nome de variáveis
[editar | editar código-fonte]O compilador PL/I permite usar variáveis que são consideradas "reservadas" em outras linguagens (como IF, ELSE, THEN,etc) e usa o mesmo símbolo('=') para verificar a igualdade e atribuição. Por exemplo:
IF IF = THEN THEN THEN = ELSE; ELSE ELSE = IF;
Exemplos de código
[editar | editar código-fonte]Procura por uma string
[editar | editar código-fonte]FINDSTRINGS: PROCEDURE OPTIONS(MAIN); /* READ A STRING, THEN PRINT EVERY */ /* SUBSEQUENT LINE WITH A MATCH */ DECLARE PAT VARYING CHARACTER(100), LINEBUF VARYING CHARACTER(100), (LINENO, NDFILE, IX) FIXED BINARY; NDFILE = 0; ON ENDFILE(SYSIN) NDFILE=1; GET EDIT(PAT) (A); LINENO = 1; DO WHILE (NDFILE=0); GET EDIT(LINEBUF) (A); IF LENGTH(LINEBUF) > 0 THEN DO; IX = INDEX(LINEBUF, PAT); IF IX > 0 THEN DO; PUT SKIP EDIT (LINENO,LINEBUF)(F(2),A); END; END; LINENO = LINENO + 1; END; END FINDSTRINGS;
Hello World
[editar | editar código-fonte]HELLO: PROCEDURE OPTIONS (MAIN); /* A PROGRAM TO OUTPUT HELLO WORLD */ FLAG = 0; LOOP: DO WHILE (FLAG = 0); PUT SKIP LIST('HELLO WORLD!'); END; END HELLO;
N-Primeiros Números Perfeitos
[editar | editar código-fonte]program nperfeitos declare n,qtd,soma,contador,i,j: int; numeros: array[1..40] of int; begin display('Valor de N') reply(n); qtd=0; i=2; while qtd<n do begin soma=0; j=1; while j<i do begin if (i%j=0) then begin soma=soma+j; end; else j=j+1; endif; if (soma=i) then begin numeros[qtd+1]=i; qtd=qtd+1; end; else i=i+1; endif; for contador=1 to n do begin display(numeros[contador]); end;
Bubble Sort
[editar | editar código-fonte]SHELL: PROCEDURE OPTIONS (MAIN); DECLARE ARRAY(50) FIXED BIN(15), (K,N) FIXED BIN(15); GET LIST(N); GET EDIT((ARRAY(K) DO K = 1 TO N)); PUT EDIT((ARRAY(K) DO K = 1 TO N)); CALL BUBBLE(ARRAY,N); END BUBBLE; BUBBLE: PROCEDURE(ARRAY,N); /* BUBBLE SORT*/ DECLARE (I,J) FIXED BIN(15); DECLARE S BIT(1); /* SWITCH */ DECLARE Y FIXED BIN(15); /* TEMPO */ DO I = N-1 BY -1 TO 1; S = '1'B; DO J = 1 TO I; IF X(J)>X(J+1) THEN DO; S = '0'B; Y = X(J); X(J) = X(J+1); X(J+1) = Y; END; END; IF S THEN RETURN; END; RETURN; END SRT;
Referências
- ↑ Sturm, Eberhard (2009). The New PL/I. [S.l.]: Vieweg+Teubner. ISBN 978-3-8348-0726-7