home *** CD-ROM | disk | FTP | other *** search
- .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.
-