IMP est un langage de programmation système ancien , développé par Edgar T. Irons à la fin des années 1960 et au début des années 1970, au sein de la National Security Agency (NSA). Contrairement à la plupart des autres langages système, IMP prend en charge la programmation extensible en syntaxe .
Même si son concepteur fait référence au langage comme étant « basé sur ALGOL » , IMP exclut de nombreuses fonctionnalités définissant ce langage, tout en prenant en charge une fonctionnalité très différente de celle d'ALGOL : l'extensibilité de la syntaxe.
Un compilateur pour IMP existait déjà en 1965 et a été utilisé pour programmer le système de partage de temps CDC 6600 , utilisé à l' Institute for Defense Analyses depuis 1967. Bien que le compilateur soit plus lent que ceux comparables pour les langages non extensibles, il a été utilisé pour des travaux de production pratiques.
Les compilateurs IMP ont été développés pour les ordinateurs CDC 6600 , Cray , PDP-10 et PDP-11 . Les versions IMP les plus importantes étaient IMP65, IMP70 et IMP72.
Syntaxe extensible dans IMP72
En tant que langage de programmation à syntaxe extensible, IMP permet à un programmeur d'étendre sa syntaxe, bien qu'aucun moyen spécifique ne soit fourni pour y ajouter de nouveaux types de données ou structures. Pour obtenir son extensibilité syntaxique, IMP utilise un puissant algorithme d'analyse basé sur un graphe de syntaxe et plusieurs matrices de connectivité. Le programmeur peut ajouter de nouvelles productions de forme Backus-Naur (BNF) au graphe.
La syntaxe d'IMP72 est étendue au moyen d' instructions de syntaxe BNF étendues incluses dans un programme de code source . Le mécanisme est si puissant qu'il a permis l'implémentation du langage par lui-même, c'est-à-dire par un fichier source IMP72 constitué entièrement d'instructions de syntaxe, qui a été entré dans un compilateur trivial qui était initialement capable de traduire le cas le plus simple de l'instruction de syntaxe. Il existe également une forme simple de l'instruction de syntaxe qui ressemble à une macro pour l'utilisateur occasionnel.
Fondamentalement, l'énoncé de syntaxe est une production BNF augmentée avec la sémantique associée ajoutée à droite :
< classe > :: = partie syntaxique :: = partie sémantique
Par exemple, pour ajouter la construction décrite par le BNF suivant :
< EXP > :: = INCRÉMENT < VBL >
avec la sémantique qui INCREMENT Vdevrait se traduire par V ← V + 1, le programmeur n'aurait besoin que d'insérer l' instruction IMP suivante :
< EXP > :: = INCREMENT < VBL , A > :: = "A←A+1"
La partie sémantique peut également contenir des appels à des routines sémantiques , comme dans l'instruction de syntaxe suivante :
< ATOME > :: = ABS ( < ATOME , A > ) :: = DEWOP ( 214 B , AREG1 ( 1 , 13 ) , A )
La partie sémantique de cette instruction consiste en un appel à la routine sémantique DEWOP. Les arguments sont la constante octale 214B, l'appel de routine sémantique AREG1(1,13)et A, qui est l'objet en haut de la pile au moment où cette production est invoquée. DEWOPest une routine sémantique qui prend respectivement comme arguments un opcode en langage machine PDP-10 , un objet registre et tout autre objet, et produit un objet dont la valeur est le résultat de l'exécution de l'instruction machine désignée en utilisant comme champ d'adresse l'objet qui est son dernier argument. Dans cet exemple, l'opcode 214Bdésigne l' Load Magnitudeinstruction, et donc le résultat de l'instruction syntaxique ci-dessus sera de compiler du code pour calculer la valeur absolue de A.
Système d'exploitation folklorique
IMP était le langage utilisé sur le système d'exploitation à temps partagé développé par la NSA, appelé Folklore .