Herramientas de usuario

PL/I

PL/I es un lenguaje procedural imperativo que combina funcionalidades de ALGOL, COBOL y FORTRAN. La sintaxis de lenguaje PL/I fue publicada por primera vez en 1965, con un primer compilador implementado en 1966. El lenguaje recibió estandarización ANSI X3.53 en 1976.

Historia

A comienzos de los 60s, poco después del desarrollo de los primeros compiladores de alto nivel, los programadores del cómputo habían caído en tres campos: programadores de negocios que usaban COBOL, programadores científicos que usaban FORTRAN, y programadores de sistemas que empleaban lenguaje ensamblador. IBM buscó remediar esta situación desarrollando un lenguaje de programación que pudiese ser empleado por todos los programadores: PL/I, que significa “Programming Language I (numera romano 1, como en “un lenguaje para todos”).

PL/I fue empleado como el lenguaje de sistemas de programación para el Proyecto Multics, fue utilizado en el desarrollo de aplicaciones notables como SAS y Sabre (sistema de reserva de pasajes aéreos). IBM usó internamente varios lenguajes derivados de PL/I para el desarrollo de sus sistemas. Sin embargo, debido al tamaño del lenguaje, el desarrollo de los compiladores para PL/I demostró ser dificultoso. PL/I fracasó en atraer muchos programadores de los campos de COBOL o FORTRAN y nunca se volvió ampliamente popular.

Existe disponible un compilador PL/I en el sistema OpenVMS del ICM. El siguiente tutorial fue redactado para abarcar el compilador PL/I Kednos PL/I V3.8 para la VAX con OpenVMS “Rosencrantz” del ICM.

Ingresando a Rosencrantz

ssh rosie@bitzone.sdf.org

Recibirás la siguiente pantalla de bienvenida:

Escape is ^]


Welcome to the Interim Computer Museum! You have reached our VAXstation 
4000-60, named Rosencrantz. If you have an account, please log in. New
accounts can be requested by Interim Computer Museum Bootstrap members.
Please visit our website (https://icm.museum/join.html).


Username:
Reciba una cordial bienvenida al sistema que hemos llamado Rosencrantz!
    ____  ____________   _    _____   _  _______ __        __  _           
   / __ \/ ____/ ____/  | |  / /   | | |/ / ___// /_____ _/ /_(_)___  ____ 
  / / / / __/ / /       | | / / /| | |   /\__ \/ __/ __ `/ __/ / __ \/ __ \
 / /_/ / /___/ /___     | |/ / ___ |/   |___/ / /_/ /_/ / /_/ / /_/ / / / /
/_____/_____/\____/ __ _|___/_/__|_/_/|_/____/\__/\__,_/\__/_/\____/_/ /_/ 
               / // / / __ \/ __ \/ __ \      / ___// __ \
              / // /_/ / / / / / / / / /_____/ __ \/ / / /
             /__  __/ /_/ / /_/ / /_/ /_____/ /_/ / /_/ /                  
               /_/  \____/\____/\____/      \____/\____/  
           Mainframe DEC VAXStation 4000-60 del ICM Museum
       Utiliza el interprete de comandos DCL sobre OpenVMS 7.3.

   => Para obtener ayuda, ingrese HELP THIS_SYSTEM
   => Para obtener un listado de juegos, ingrese HELP GAMES.
   => Ingrese FORUM para ir al Foro de VAX.
   => Para obtener una referencia de los comandos use ALIASED_COMMANDS
      bajo HELP THIS_SYSTEM para mayor informacion.

Tutorial de Compilación de PL/I

Aprenderá a escribir y compilar un programa PL/I básico, que imprime la cadena de caracteres “Hola Tercer Mundo!”.

Compilar, Enlazar, Correr

Crea un fichero de texto llamado HOLA.PLI

lse HOLA.PLI

…e ingresa el siguiente código fuente:

HOLA: PROCEDURE OPTIONS (MAIN);
       PUT LIST ('Hola Tercer Mundo!');
       END;

Guarde el código fuente anterior en el fichero HOLA.PLI y vuelve al prompt del intérprete DCL de OpenVMS con Ctrl+z. Luego en el prompt del intérprete DCL ingresa:

$ PLI HOLA
$ LINK HOLA
$ RUN HOLA
Hola Tercer Mundo!
$

Resumen de sintaxis del Lenguaje PL/I

identificador: PROCEDURE OPTIONS (MAIN); [declaración; …] sentencia; … END;Procedimiento principal
OPTIONS (MAIN) puede omitirse si el procedimiento principal es el primero y/o único en el programa.
identificador: PROCEDURE [(argumento [, …])]; [declaración; …] sentencia; … END;Procedimiento de subrutina
CALL identificador [(argumento [, …])];Llamada de subrutina
Los Argumentos Variables son normalmente pasados por referencia. Cierre el argumento entre paréntesis para pasar por valor.
identificador: PROCEDURE [(argumento [, …])] RETURNS (tipo); [declaración; …] sentencia; … RETURN valor; END;Procedimiento de Función
identifier [(argumento [, …])]Llamada de Función (dentro de expresión)
DECLARE identificador tipo [INITIAL (valor)];Declaración de Variable
DECLARE identificador (dimensión [, …]) tipo;Declaración de Arreglo
%REPLACE identificador BY valor;Declara constante simbólica
identificador [(index [, …])] = expresión;Asignación
arreglo = expresión;Asignación a todos los elementos del arreglo
IF expression THEN sentencia1;
[ELSE sentencia2;]
Ejecución condicional
DO sentencia; … END;
BEGIN [declaration; …] sentencia; … END;
Secuencia de sentencia múltiples (puede usarse en lugar de sentencias simples en IF y ELSE)
DO identificador = comienzo TO final [BY incremento]; sentencia; … END;Bucle contabilizado
DO WHILE (expresión); sentencia; … END;Repite cuerpo de bucle mientras es verdadera la expresión
GET LIST (identificador [, …]);Analiza campos delimitados por espacio/tab/coma desde cadena de entrada de terminal y los convierte de acuerdo al tipo de dato del identificador
PUT LIST (identificador|literal [, …]);Imprime datos desde identificador o literal a cadena de salida de terminal
PUT SKIP [(lines)];Comienza salida en nueva línea
/* … */Comentario (ahora sabe de donde los obtuvo C)

Tipos de datos

Tipo Declaración Default
longitud/
precisión
Literal Consideraciones
Entero FIXED BINARY [(precision)]31 bits123
Coma flontate (precisión simple)FLOAT BINARY [(precisión)]24 bits1.23E-5
Coma flontante (precisión doble)FLOAT BINARY (precisión) 1.23E-5Especifica precisión de 25-53 bits
Cadena de caracteresCHARACTER [(longitud)]1 caracter'cadena'
BooleanoBIT [(longitud)]1 bit'0'B (false)
'1'B (verdadero)

PL/I soporta una cantidad de otros tipos de datos que principalmente guardan interés histórico.

Operadores

Operador Operación Precedencia
( … )Conjunto1
**Exponenciación2
+ (prefijo)Positivo2
- (prefijo)Negativo2
^NOT Lógico2
*Multiplicación3
/División3
+Adición4
-Substracción4
||Concatenación de cadena5
=Igual a6
>Mayor que6
<Menor que6
^>No mayor que6
^<No menor que6
^=No igual a6
<=Menor o igual que6
>=Mayor o igual que6
&AND Lógico7
|OR Lógico8

Funciones incorporadas

(Ver "Chapter 11 Built-In Functions, Subroutines, and Pseudovariables" del Manual de Referencia Kednos PL/I 1).)

Identificadores

Los identificadores (nombres de variables, etiquetas, etc.) pueden tener hasta 31 caracteres de extensión comprendiendo caracteres A-Z, a-z, 0-9, $, y _. Los identificadores no pueden comenzar con un caracter numérico. Las mayúsculas y minúsculas se consideran equivalentes, de modo que A y a son el mismo identificador.

Formato fuente

Cada declaración debe estar terminada con un punto y coma (;), pero fuera de eso, el formato resulta libre. Pueden aparecer múltiples declaraciones en una única línea, y una decaración simple puede abarcar múltiples líneas. En PL/I pueden insertarse cualquier cantidad de caracteres de espacio en blanco, tabulación o nueva línea entre las palabras claves.

Otras referencias

1)
Kednos PL/I for OpenVMS Systems Reference Manual, Kednos Corporation, Jan. 2007. [Online]. Disponible en: https://www.kednos.com/pli/docs/REFERENCE_MANUAL/6291pro.html. [Accedido el Oct. 19, 2026].

Este sitio web utiliza cookies para guardar datos esenciales de su actividad, como su autenticación. Al entrar acepta el uso de cookies.

Más información