THE COGENT (COmpiler and GENeralized Translator) programming system is a compiler whose input language is designed to describe symbolic or linguistic manipulation algorithms. Although the system is intended primarily for use as a compiler compiler, it is also applicable to such problem areas as algebraic manipulation, mechanical theorem-proving, and heuristic programming.
In designing the system the major objective has been to unify the concept of syntax-directed compilation1 with the more general but primitive concept of recursive list-processing2. This objective is achieved by using the syntax of a language to define a mapping between strings of the language and list structures. Given such a mapping, linguistic processes become equivalent to list processes, and a list-processing language becomes a concise vehicle for describing such processes.
Thus a program written in the COGENT language is a list-processing program in which the list structures normally represent phrases of one or more object languages (i.e., the input and output languages to be processed by the program), in a representation determined by the syntax of these languages. Correspondingly, the COGENT language itself contains two major constructions: productions, which define the object language syntax, and generator definitions, which define list-processing subroutines called generators.
[1]
John McCarthy,et al.
Recursive functions of symbolic expressions and their computation by machine, Part I
,
1960,
Commun. ACM.
[2]
Douglas T. Ross.
A generalized technique for symbol manipulation and numerical calculation
,
1961,
CACM.
[3]
D. Morris,et al.
A General Translation Program for Phrase Structure Languages
,
1962,
JACM.
[4]
John McCarthy,et al.
LISP 1.5 Programmer's Manual
,
1962
.
[5]
Edgar T. Irons,et al.
A syntax directed compiler for ALGOL 60
,
1961,
CACM.
[6]
John W. Backus,et al.
The syntax and semantics of the proposed international algebraic language of the Zurich ACM-GAMM Conference
,
1959,
IFIP Congress.