Paradigmas | Multi-paradigma : procedimental , imperativo , estructurado , extensible |
---|---|
Familia | ALGOL |
Diseñada por | Edgar T. Irons |
Desarrollador | Agencia de Seguridad Nacional |
Apareció por primera vez | 1965 |
Lanzamiento estable | IMP72 / 1972 |
Disciplina de mecanografía | Estático , fuerte |
Alcance | Léxico |
Lenguaje de implementación | ALGOL 60 |
Plataforma | CDC 6600 , Cray , PDP-10 , PDP-11 |
SO | COS , SCOPE , TOPS-10 , Unix , otros |
Licencia | Propiedad |
Implementaciones importantes | |
IMP65, IMP70, IMP72 | |
Influenciado por | |
ALGOL 60 |
IMP es uno de los primeros lenguajes de programación de sistemas que fue desarrollado por Edgar T. Irons desde finales de la década de 1960 hasta principios de la de 1970, en la Agencia de Seguridad Nacional (NSA). A diferencia de la mayoría de los otros lenguajes de sistemas, IMP admite sintaxis : programación extensible .
A pesar de que su diseñador se refiere al lenguaje como "basado en ALGOL " [ cita requerida ] , IMP excluye muchas características definitorias de ese lenguaje, mientras soporta una muy diferente a ALGOL: la extensibilidad de la sintaxis.
Un compilador para IMP existía ya en 1965 y se utilizó para programar el sistema de tiempo compartido CDC 6600 , que estaba en uso en el Instituto de Análisis de Defensa desde 1967. Aunque el compilador es más lento que otros comparables para lenguajes no extensibles, se ha utilizado para trabajos prácticos de producción.
Los compiladores de IMP se desarrollaron para las computadoras CDC 6600 , Cray , PDP-10 y PDP-11 . Las versiones importantes de IMP fueron IMP65, IMP70 e IMP72.
Al ser un lenguaje de programación de sintaxis extensible, IMP permite a un programador extender su sintaxis, aunque no se proporcionan medios específicos para agregarle nuevos tipos de datos o estructuras. Para lograr su extensibilidad de sintaxis, IMP utiliza un poderoso algoritmo de análisis basado en un gráfico de sintaxis y varias matrices de conectividad. El programador puede agregar nuevas producciones en formato Backus – Naur (BNF) al gráfico.
La sintaxis de IMP72 se amplía mediante declaraciones de sintaxis BNF ampliadas incluidas en un programa de código fuente . El mecanismo es tan poderoso que permitió la implementación del lenguaje por sí mismo, es decir, mediante un archivo fuente IMP72 que constaba completamente de declaraciones de sintaxis, que se ingresó a un compilador trivial que inicialmente pudo traducir el caso más simple de la declaración de sintaxis. . También hay una forma simple de la declaración de sintaxis que parece una macro para el usuario casual.
Básicamente, la declaración de sintaxis es una producción BNF aumentada con semántica asociada agregada a la derecha:
< clase > :: = parte-sintaxis :: = parte-semántica
Por ejemplo, para agregar la construcción descrita por el siguiente BNF:
< EXP > :: = INCREMENTO < VBL >
con la semántica a la que INCREMENT V
debería traducirse V ← V + 1
, el programador solo necesitaría insertar la siguiente declaración IMP :
< EXP > :: = INCREMENTO < VBL , A> :: = "A ← A + 1"
La parte semántica también puede contener llamadas a rutinas semánticas , como en la siguiente declaración de sintaxis:
< ATOM > :: = ABS ( < ATOM , A> ) :: = DEWOP ( 214 B, AREG1 ( 1 , 13 ) , A )
La parte semántica de esta declaración consiste en una llamada a la rutina semántica DEWOP
. Los argumentos son la constante octal 214B
, la llamada a la rutina semántica AREG1(1,13)
y A
, que es el objeto en la parte superior de la pila en el momento en que se invoca esta producción. DEWOP
es una rutina semántica que toma respectivamente como argumentos un código de operación en lenguaje de máquina PDP-10 , un objeto de registro y cualquier otro objeto, y produce un objeto cuyo valor es el resultado de ejecutar la instrucción de máquina designada utilizando como campo de dirección el objeto que es su último argumento. En este ejemplo, el código de operación 214B
designa la Load Magnitude
instrucción y, por lo tanto, el resultado de la declaración de sintaxis anterior será compilar el código para calcular el valor absoluto de A
.
IMP era el lenguaje utilizado en el sistema operativo de tiempo compartido de cosecha propia de la NSA llamado Folklore . [1]