IMP is an early
systems programming language that was developed by
Edgar T. Irons
Edgar is a commonly used English given name, from an Anglo-Saxon name ''Eadgar'' (composed of '' ead'' "rich, prosperous" and ''gar'' "spear").
Like most Anglo-Saxon names, it fell out of use by the later medieval period; it was, however, rev ...
in the late 1960s through early 1970s, at the
National Security Agency (NSA). Unlike most other systems languages, IMP supports
syntax
In linguistics, syntax () is the study of how words and morphemes combine to form larger units such as phrases and sentences. Central concerns of syntax include word order, grammatical relations, hierarchical sentence structure ( constituency) ...
-
extensible programming.
Even though , IMP excludes many ''defining'' features of that language, while supporting a very non-ALGOL-like one: syntax extensibility.
A
compiler for IMP existed as early as 1965 and was used to program the
CDC 6600 time-sharing system, which was in use at the
Institute for Defense Analyses
The Institute for Defense Analyses (IDA) is an American non-profit corporation that administers three federally funded research and development centers (FFRDCs) – the Systems and Analyses Center (SAC), the Science and Technology Policy Institute ...
since 1967. Although the compiler is slower than comparable ones for non-extensible languages, it has been used for practical production work.
IMP compilers were developed for the
CDC 6600,
Cray
Cray Inc., a subsidiary of Hewlett Packard Enterprise, is an American supercomputer manufacturer headquartered in Seattle, Washington. It also manufactures systems for data storage and analytics. Several Cray supercomputer systems are listed ...
,
PDP-10 and
PDP-11
The PDP-11 is a series of 16-bit minicomputers sold by Digital Equipment Corporation (DEC) from 1970 into the 1990s, one of a set of products in the Programmed Data Processor (PDP) series. In total, around 600,000 PDP-11s of all models were sold, ...
computers. Important IMP versions were IMP65, IMP70, and IMP72.
Extensible syntax in IMP72
Being an extensible syntax programming language, IMP allows a programmer to extend its syntax, although no specific means are provided to add new
data type
In computer science and computer programming, a data type (or simply type) is a set of possible values and a set of allowed operations on it. A data type tells the compiler or interpreter how the programmer intends to use the data. Most progra ...
s or structures to it. To achieve its syntax-extensibility, IMP uses a powerful parse algorithm based on a syntax graph and several connectivity matrices. The programmer may add new
Backus–Naur form
In computer science, Backus–Naur form () or Backus normal form (BNF) is a metasyntax notation for context-free grammars, often used to describe the syntax of languages used in computing, such as computer programming languages, document formats ...
(BNF) productions to the graph.
IMP72's syntax is extended by means of extended-BNF ''syntax statements'' included in a
source code program. The mechanism is so powerful, that it allowed the implementation of the language by itself, i.e., by an IMP72 source file consisting entirely of syntax statements, which was input to a trivial compiler which was initially able to translate the simplest case of the syntax statement. There is also a simple form of the syntax statement which looks like a
macro
Macro (or MACRO) may refer to:
Science and technology
* Macroscopic, subjects visible to the eye
* Macro photography, a type of close-up photography
* Image macro, a picture with text superimposed
* Monopole, Astrophysics and Cosmic Ray Observat ...
to the casual user.
Basically, the syntax statement is an augmented BNF production with associated
semantics added on the right:
::= syntax-part ::= semantic-part
For example, to add the construct described by the following BNF:
::= INCREMENT
with the semantics that
INCREMENT V
should translate to
V ← V + 1
, the programmer would only need to insert the following ''IMP statement'':
::= INCREMENT ::= "A←A+1"
The semantic-part can also contain calls to ''semantic routines'', as in the following syntax statement:
::= ABS ( ) ::= DEWOP(214B,AREG1(1,13),A)
The semantic part of this statement consists of a call on the semantic routine
DEWOP
. The arguments are the octal constant
214B
, the semantic routine call
AREG1(1,13)
, and
A
, which is the object on top of the stack at the moment this production is invoked.
DEWOP
is a semantic routine which respectively takes as its arguments a PDP-10 machine language
opcode
In computing, an opcode (abbreviated from operation code, also known as instruction machine code, instruction code, instruction syllable, instruction parcel or opstring) is the portion of a machine language instruction that specifies the operat ...
, a register object, and any other object, and produces an object whose value is the result of executing the designated machine instruction using as address field the object which is its last argument. In this example, the opcode
214B
designates the
Load Magnitude
instruction, and thus the result of the above syntax statement will be to compile code to compute the absolute value of
A
.
Folklore operating system
IMP was the language used on NSA's homegrown
time-sharing operating system named ''Folklore''.
See also
*
Edinburgh IMP language (contrast)
References
*
*
External links
PDP-10 IMP72 Reference ManualIMP72 Sources(dcus: 3,50306.*)
{{DEFAULTSORT:Imp Programming Language
Extensible syntax programming languages
Systems programming languages
National Security Agency