Mini-Unix/usr/doc/rat/rat

.ce 100
RATFOR _ A Rational Fortran
.sp 2
B. W. Kernighan
.sp
Bell Laboratories
Murray Hill, N. J. 07974
.ce 0
.fi
.sp 
.de PP
.sp
.ti +5
..
.PP
Fortran programs are hard to read, write and debug.
To make program development easier,
RATFOR 
provides a set of decent control structures:
.sp
.nf
  statement grouping
  completely general \fBif - else\fR statements
  \fBwhile\fR, \fBfor\fR and \fBdo\fR for looping
  \fBbreak\fR and \fBnext\fR for controlling loop exits
.sp
.fi
and some ``syntactic sugar'':
.sp
.nf
  free form input (e.g., multiple statements/line)
  unobtrusive comment convention
  translation of >, >=, etc., into .GT., .GE., etc.
  ``define'' statement for symbolic parameters
  ``include'' statement for including source files
.sp
.fi
.PP
RATFOR
not only
makes programming in Fortran more enjoyable,
but also allows structured programming, in the sense of
coding without
GOTO's.
RATFOR
programs tend to be markedly easier
to write, read, and make correct than their equivalents
in standard Fortran.
.PP
RATFOR
is a preprocessor,
translating the input into standard Fortran constructions.
RATFOR
programs may readily be written so the generated Fortran
is portable;
program transferability is easy to achieve.
RATFOR
is written in itself,
so it is also portable.
.sp
.PP
The grammar of
RATFOR 
is as follows:
.nf
.sp
prog	: stat 
	| prog  stat
stat	: \fBif\fP( condition ) stat 
	| \fBif\fP( condition ) stat \fBelse\fP stat
	| \fBwhile\fP( condition ) stat
	| \fBfor\fP( initialization; condition; increment ) stat
	| \fBdo\fP do-part stat
	| break
	| next
	| digits  stat
	| { prog }
	| anything unrecognizable
.fi
.sp
In the grammar above,
condition
can be any legal Fortran condition like 
"`A .EQ. B',"
i.e., anything that could appear in a legal Fortran logical 
IF
statement.
stat 
is, of course, any Fortran or
RATFOR
statement,
or any collection of these enclosed in braces.
.PP
The
while
statement performs a loop while some specified condition is true.
The test is performed at the \fIbeginning\fR of the loop,
so it is
possible to do a
while
zero times,
which can't be done with a Fortran
DO.
.PP
The
for
statement
is a somewhat generalized
while
statement
that allows an initialization and an
incrementing step as well as a termination condition
on a loop.
initialization
is any single \fIFortran\fR statement, which gets done once
before the loop begins.
increment
is any single \fIFortran\fR statement,
which gets done at the end of each pass through the loop,
before the test.
.PP
for
and
while
are useful for
backward loops, chaining along lists,
loops that must be done zero times,
and similar things which are hard to express with a 
DO
statement,
and obscure to write out directly.
.PP
The
do
statement is like a Fortran 
DO,
except that no label or 
CONTINUE
is needed.
The \fBdo-part\fP that follows the 
do
keyword has to be something that can legally go into
a Fortran 
DO
statement.
.PP
A
break
causes an immediate exit from a
for,
while
or
do
to the following statement.
The
next
statement causes an immediate transfer to the
increment
part of a
for
or
do,
and the test part of a
while.
Both
break
and
next
refer to the innermost enclosing 
for,
while
or
do.
.sp
.br
.PP
Statements can be placed anywhere on a line;
long statements are continued automatically.
Multiple statements may appear on one line,
if they are separated by semicolons.
No semi-colon is needed at the end of a line,
if
RATFOR
can guess whether the statement
ends there.
Lines ending with any characters
obviously a continuation, like plus or comma,
are assumed to be continued on the next line.
Any statement that begins with an all-numeric field is
assumed to be a Fortran label,
and placed in columns 1-5.
PP
A
`#'
character in a line marks the beginning
of a comment;
the comment is terminated by the end of a line.
.PP
Text enclosed in matching single or double quotes
is converted to
nH...
by
RATFOR,
but is otherwise unaltered.
Characters like `>', `>=', and `&'
are translated into their longer Fortran equivalents
`.GT.', 
`.GE',
and
`.AND',
except within quotes.
.PP
Any string of alphanumeric characters can be defined as a name;
thereafter, whenever that name occurs in the input
(delimited by non-alphanumerics)
it is replaced by the rest of the definition line
(comments are stripped off).
.PP
An entire source file may be included by saying
``include filename'' at the appropriate place.