2.  Languages

2.1.  The C Language

o CC
Compile and/or link edit programs in the C language. The UNIX operating system, most of the subsystems and C itself are written in C. For a full description of C, read The C Programming Language, Brian W. Kernighan and Dennis M. Ritchie, Prentice-Hall, 1978.
O
General purpose language designed for structured programming.
O
Data types include character, integer, float, double, pointers to all types, functions returning above types, arrays of all types, structures and unions of all types.
O
Operations intended to give machine-independent control of full machine facility, including to-memory operations and pointer arithmetic.
O
Macro preprocessor for parameterized code and inclusion of standard files.
O
All procedures recursive, with parameters by value.
O
Machine-independent pointer manipulation.
O
Object code uses full addressing capability of the PDP-11.
O
Runtime library gives access to all system facilities.
O
Definable data types.
O
Block structure
o LINT
Verifier for C programs. Reports questionable or nonportable usage such as: Mismatched data declarations and procedure interfaces.


Nonportable type conversions.


Unused variables, unreachable code, no-effect operations.


Mistyped pointers.


Obsolete syntax.
O
Full cross-module checking of separately compiled programs.
o CB
A beautifier for C programs.
Does proper indentation and placement of braces.

2.2.  Fortran

o F77
A full compiler for ANSI Standard Fortran 77.
O
Compatible with C and supporting tools at object level.
O
Optional source compatibility with Fortran 66.
O
Free format source.
O
Optional subscript-range checking, detection of uninitialized variables.
O
All widths of arithmetic: 2- and 4-byte integer; 4- and 8-byte real; 8- and 16-byte complex.
o RATFOR
Ratfor adds rational control structure a` la C to Fortran.
O
Compound statements.
O
If-else, do, for, while, repeat-until, break, next statements.
O
Symbolic constants.
O
File insertion.
O
Free format source
O
Translation of relationals like >, >=.
O
Produces genuine Fortran to carry away.
O
May be used with F77.
o STRUCT
Converts ordinary ugly Fortran into structured Fortran (i.e., Ratfor), using statement grouping, if-else, while, for, repeat-until.

2.3.  Other Algorithmic Languages

o BAS
An interactive interpreter, similar in style to BASIC. Interpret unnumbered statements immediately, numbered statements upon `run'.
O
Statements include: comment,
dump,
for...next,
goto,
if...else...fi,
list,
print,
prompt,
return,
run,
save.
O
All calculations double precision.
O
Recursive function defining and calling.
O
Builtin functions include log, exp, sin, cos, atn, int, sqr, abs, rnd.
O
Escape to ED for complex program editing.
o DC
Interactive programmable desk calculator. Has named storage locations as well as conventional stack for holding integers or programs.
O
Unlimited precision decimal arithmetic.
O
Appropriate treatment of decimal fractions.
O
Arbitrary input and output radices, in particular binary, octal, decimal and hexadecimal.
O
Reverse Polish operators: + - * /
remainder, power, square root,
load, store, duplicate, clear,
print, enter program text, execute.
o BC
A C-like interactive interface to the desk calculator DC.
O
All the capabilities of DC with a high-level syntax.
O
Arrays and recursive functions.
O
Immediate evaluation of expressions and evaluation of functions upon call.
O
Arbitrary precision elementary functions: exp, sin, cos, atan.
O
Go-to-less programming.

2.4.  Macroprocessing

o M4
A general purpose macroprocessor.
O
Stream-oriented, recognizes macros anywhere in text.
O
Syntax fits with functional syntax of most higher-level languages.
O
Can evaluate integer arithmetic expressions.

2.5.  Compiler-compilers

o YACC
An LR(1)-based compiler writing system. During execution of resulting parsers, arbitrary C functions may be called to do code generation or semantic actions.
O
BNF syntax specifications.
O
Precedence relations.
O
Accepts formally ambiguous grammars with non-BNF resolution rules.
o LEX
Generator of lexical analyzers. Arbitrary C functions may be called upon isolation of each lexical token.
O
Full regular expression, plus left and right context dependence.
O
Resulting lexical analysers interface cleanly with YACC parsers.