Initial revision
This commit is contained in:
418
lang/a68s/a68s.1
Normal file
418
lang/a68s/a68s.1
Normal file
@@ -0,0 +1,418 @@
|
||||
.TH A68S 1 "Version 2.2a Jul 15 1987"
|
||||
.SH NAME
|
||||
a68s, indent68 \- ALGOL 68S compiler
|
||||
.SH SYNOPSIS
|
||||
.B a68s
|
||||
.IR arguments
|
||||
.PP
|
||||
.BR ack (etc)
|
||||
.IR arguments
|
||||
.PP
|
||||
.B indent68
|
||||
.IR filename
|
||||
.SH DESCRIPTION
|
||||
ALGOL68S source files should have the extension `.8'.
|
||||
.LP
|
||||
.I a68s
|
||||
accepts the same flags and conventions as
|
||||
.I ack
|
||||
(q.v.). Thus 'a68s -o
|
||||
.I prog
|
||||
.IR prog .8'
|
||||
will compile the source in file
|
||||
.IR prog .8,
|
||||
producing executable binary in
|
||||
.IR prog
|
||||
and a program listing in
|
||||
.IR prog .8.lst.
|
||||
.IP
|
||||
WARNING. Although the
|
||||
.I ack
|
||||
system will have produced the usual intermediate files with suffices .k, .m and .o
|
||||
(and you may even stop the compilation at these intermediate stages if you wish),
|
||||
do not try to include other files (whether ending in .8 or in .anything else)
|
||||
as the present compiler has no facilities for separate or
|
||||
mixed-language compilation. Hopefully, this will be rectified some day.
|
||||
.IP
|
||||
If the source file starts with a digit, it will be assumed that every line
|
||||
starts with a line number (but the sequencing is not checked). These line
|
||||
numbers will then appear on the .lst file,
|
||||
and will be used in diagnostic messages.
|
||||
.LP
|
||||
`indent68'
|
||||
will read the given
|
||||
.IR filename
|
||||
which is expected to be an ALGOL 68 program.
|
||||
A correctly indented form of the same program is sent to the standard output.
|
||||
Note that, unlike more elaborate prettyprinters, it confines itself to
|
||||
inserting or removing blanks at the beginnings of lines (although it does
|
||||
insist upon a space after each
|
||||
.BR go-on-symbol
|
||||
.RI ( ; )
|
||||
and after a starting
|
||||
.BR brief-comment-symbol
|
||||
.RI ( # ).
|
||||
It is particularly intended for indenting programs that place their
|
||||
.BR go-on-symbols
|
||||
at the start of the line (i.e. before the next
|
||||
.BR statement
|
||||
rather than after the last one), but it will produce an acceptable
|
||||
indentation of any program.
|
||||
.SH LANGUAGE
|
||||
The language implemented is the official sublanguage of ALGOL 68 (usually
|
||||
known as ALGOL 68S), as defined in [1] (see also Appendix 4 of [2]). The only
|
||||
features of ALGOL 68S not implemented are binary transput and
|
||||
.IR "stand back channel" .
|
||||
On the other hand, in addition to the official features of ALGOL 68S, the
|
||||
.B heap-generator
|
||||
(but not the
|
||||
.BR sample-heap-generator )
|
||||
is implemented. WARNING. The garbage collector is of the "access count"
|
||||
variety, and it will therefore not collect circular lists which may become
|
||||
inaccessible (however, circular lists constructed from
|
||||
.BR local-generators
|
||||
are collected correctly on range exit).
|
||||
.PP
|
||||
The hardware representation is the official one ([3]), except for the absence
|
||||
of reserved-word stropping.
|
||||
.PP
|
||||
The principal limitations with respect to full ALGOL 68 are therefore as
|
||||
follows.
|
||||
.TP
|
||||
1.
|
||||
All defining occurences must precede their applied occurrences (except for
|
||||
.BR labels ).
|
||||
.TP
|
||||
2.
|
||||
No
|
||||
.IR UNION s
|
||||
or
|
||||
.BR conformity-clauses
|
||||
or
|
||||
.IR EMPTY .
|
||||
.TP
|
||||
3.
|
||||
No
|
||||
.IR FLEX
|
||||
(but
|
||||
.IR STRING
|
||||
is OK) and no
|
||||
.BR vacuums .
|
||||
.TP
|
||||
4.
|
||||
Structures may not contain arrays, and
|
||||
.B 'row-of-row-of'
|
||||
modes are not permitted (as opposed to
|
||||
.B 'row-row-of'
|
||||
modes which are OK).
|
||||
.TP
|
||||
5.
|
||||
No
|
||||
.BR parallel-clauses
|
||||
or
|
||||
.BR void-collateral-clauses
|
||||
(but
|
||||
.BR displays
|
||||
are OK).
|
||||
.TP
|
||||
6.
|
||||
No formatted transput.
|
||||
.TP
|
||||
7.
|
||||
.IR GOTO
|
||||
(or
|
||||
.IR GO
|
||||
.IR TO )
|
||||
may not be omitted in a
|
||||
.BR jump .
|
||||
.TP
|
||||
8.
|
||||
No procedured jumps.
|
||||
.TP
|
||||
9.
|
||||
Existing
|
||||
.BR operators
|
||||
(notably the
|
||||
.BR standard-prelude
|
||||
ones) may not be redefined (nor may their priorities be altered).
|
||||
.TP
|
||||
10.
|
||||
Restricted
|
||||
.BR standard-prelude .
|
||||
The following is a complete list of the standard
|
||||
.BR indicators
|
||||
available.
|
||||
.IP
|
||||
.IR "maxint, maxreal, smallreal, pi, maxabschar"
|
||||
.br
|
||||
.IR "sqrt, exp, ln, nextrandom, random"
|
||||
.br
|
||||
.IR "cos, arccos, sin, arcsin, tan, arctan"
|
||||
.br
|
||||
.IR "bitspack, bytespack"
|
||||
.br
|
||||
.IR "standin channel, standout channel, "
|
||||
.IR "standin, standout"
|
||||
.br
|
||||
.IR "open, establish, associate, close"
|
||||
.br
|
||||
.IR "put, print, write, get, read"
|
||||
.br
|
||||
.IR "space, newline, newpage, set, reset"
|
||||
.br
|
||||
.IR "on logical file end, "
|
||||
.IR "on physical file end, on page end"
|
||||
.br
|
||||
.IR "on line end, maketerm"
|
||||
.br
|
||||
.IR "chan, char number, line number, page number"
|
||||
.br
|
||||
.IR "whole, fixed, float"
|
||||
.br
|
||||
.IR "stop"
|
||||
.br
|
||||
.IR "REPR, BIN, ENTIER, ROUND, ODD, SIGN, ABS, "
|
||||
.IR "LWB, UPB"
|
||||
.br
|
||||
.IR "RE, IM, ARG, CONJ"
|
||||
.br
|
||||
.IR "NOT, AND, OR, OVER, MOD, SHL, SHR, I"
|
||||
.br
|
||||
.IR "+ , - , * , / , % , %* , ^ , ** , +*"
|
||||
.br
|
||||
.IR "EQ, NE, GE, GT, LE, LT"
|
||||
.br
|
||||
.IR "= , /= , >= , > , <= , <"
|
||||
.br
|
||||
.IR "PLUSAB, MINUSAB, TIMESAB, DIVAB, OVERAB, "
|
||||
.IR "MODAB, PLUSTO"
|
||||
.br
|
||||
.IR "+:= , -:= , *:= , /:= , %:= , %*:= , +=:"
|
||||
.PP
|
||||
.SH PRAGMATS
|
||||
The following
|
||||
.BR pragmats
|
||||
are provided:
|
||||
.PD 0
|
||||
.IP
|
||||
.TP 17
|
||||
.IR "PR UPPER PR"
|
||||
(enable upper-case stropping)
|
||||
.TP
|
||||
.IR "PR POINT PR"
|
||||
(disable upper-case stropping)
|
||||
.br
|
||||
Note that point stropping always works (with either case of word).
|
||||
The essential difference with upper-case stropping is that upper-case words are
|
||||
assumed to be stropped whether a point is present or not. Thus it is always
|
||||
possible to write
|
||||
.IR ".PR UPPER .PR" ,
|
||||
which will be recognised whatever the previous stropping regime.
|
||||
.TP
|
||||
.IR "PR LIST PR"
|
||||
(turn listing on)
|
||||
.TP
|
||||
.IR "PR NOLIST PR"
|
||||
(turn listing off)
|
||||
.br
|
||||
listings are sent to the .lst file.
|
||||
.TP
|
||||
.IR "PR PAGE PR"
|
||||
(start a new page on the .lst file)
|
||||
.TP
|
||||
.IR "PR WARN PR"
|
||||
(include compile-time warning messages)
|
||||
.TP
|
||||
.IR "PR NOWARN PR"
|
||||
(omit compile-time warning messages)
|
||||
.PD
|
||||
.PP
|
||||
The words within a
|
||||
.BR pragmat
|
||||
may be in either upper or lower case, and one
|
||||
.BR pragmat
|
||||
may contain several such words, separated by commas, as in the following
|
||||
example which shows the default states.
|
||||
.IP
|
||||
.IR "PR UPPER, LIST, WARN PR"
|
||||
.SH DIAGNOSTICS
|
||||
The compile-time error messages are self-explanatory.
|
||||
They can be divided into 3 categories:
|
||||
.RS
|
||||
.br
|
||||
Lexcical errors (the offending lexeme is simply ignored)
|
||||
.br
|
||||
Syntactic errors (text up to the next
|
||||
.RI ' ; '
|
||||
or
|
||||
.RI ' ) ',
|
||||
etc. is ignored)
|
||||
.br
|
||||
Semantic errors.
|
||||
.RE
|
||||
.br
|
||||
After the first syntactic error, further checking for semantic errors is
|
||||
inhibited.
|
||||
.LP
|
||||
On the .lst file,
|
||||
a row of "=" indicates parts of the text that have been ignored.
|
||||
A "1" under a particular symbol indicates the point where an error was detected
|
||||
(a "2" indicates that 2 errors were found there). An "S" ("C", "P") is printed
|
||||
in the margin wherever a new line of source text starts within a
|
||||
.BR string-denotation
|
||||
.RB ( comment ,
|
||||
.BR pragmat ).
|
||||
Thus mismatched delimiters for these things will readily stand out.
|
||||
.LP
|
||||
A run-time error message is followed by a print out of the stack, giving the
|
||||
line number in each active procedure. For each procedure, the active
|
||||
.BR ranges
|
||||
are printed, starting from the innermost and finishing with the outermost.
|
||||
Within each range, the values ascribed to all identifiers and operators
|
||||
(apart from some manifest values) are listed in the order in which they were
|
||||
declared in the
|
||||
.BR range .
|
||||
Names are printed as a "#" followed by a number. Not much significance should
|
||||
be attached to these numbers except to note that the same name will always be
|
||||
printed as the same number. At the end of each range, the value of any active
|
||||
loop counter
|
||||
.RI ( .FOR )
|
||||
together with its increment and target
|
||||
.RI ( .BY
|
||||
and
|
||||
.IR .TO )
|
||||
will be printed.
|
||||
.SH ENVIRONMENT ENQUIRIES
|
||||
The following figures apply primarily to machines with a wordsize of 32 bits.
|
||||
Figures for 16-bit machines are given in parentheses where appropriate.
|
||||
.DS
|
||||
.IP
|
||||
.IR "max int"
|
||||
= 2147483647 (32767)
|
||||
.br
|
||||
.IR "max real"
|
||||
= 1.701411733192600E+38 (on the VAX)
|
||||
.br
|
||||
.IR "small real"
|
||||
= 3.469446951953614E-18 (on the VAX)
|
||||
.br
|
||||
.IR "bits width"
|
||||
= 32 (16)
|
||||
.br
|
||||
.IR "bytes width"
|
||||
= 4 (2)
|
||||
.br
|
||||
.IR "max abs char"
|
||||
= 127
|
||||
.br
|
||||
.IR "null character"
|
||||
= NULL
|
||||
.RI ( REPR(0) )
|
||||
.br
|
||||
.IR "int lengths" ,
|
||||
.IR "int shorths" ,
|
||||
.IR "real lengths" ,
|
||||
.IR "real shorths" ,
|
||||
.br
|
||||
.IR "bits lengths" ,
|
||||
.IR "bits shorths" ,
|
||||
.br
|
||||
.IR "bytes lengths" ,
|
||||
.IR "bytes shorths"
|
||||
.br
|
||||
all = 1
|
||||
.br
|
||||
.IR "int width"
|
||||
= 10 (5)
|
||||
.br
|
||||
.IR "real width"
|
||||
= 16
|
||||
.br
|
||||
.IR "exp width"
|
||||
= 3
|
||||
.br
|
||||
.IR "error character"
|
||||
= *
|
||||
.br
|
||||
.IR "flip"
|
||||
= T
|
||||
.br
|
||||
.IR "flop"
|
||||
= F
|
||||
.br
|
||||
On
|
||||
.IR "stand in channel" :
|
||||
.RS
|
||||
.br
|
||||
.RS
|
||||
.IR "get possible" ,
|
||||
.IR "reset possible"
|
||||
.RE
|
||||
.br
|
||||
On
|
||||
.IR "stand out channel" :
|
||||
.br
|
||||
.RS
|
||||
.IR "put possible" ,
|
||||
.IR "reset possible" ,
|
||||
.IR "compressible" ,
|
||||
.br
|
||||
.IR "estab possible"
|
||||
.RE
|
||||
.br
|
||||
On associated files:
|
||||
.br
|
||||
.RS
|
||||
.IR "get possible" ,
|
||||
.IR "put possiblle" ,
|
||||
.IR "set possible" ,
|
||||
.br
|
||||
.IR "reset possible"
|
||||
.DE
|
||||
.SH FILES
|
||||
.ta \w'/EMDISTR/lib/a68/a68s.out 'u
|
||||
.PD 0
|
||||
~em/bin/a68s
|
||||
.br
|
||||
~em/bin/indent68
|
||||
.br
|
||||
~em/lib/em_a68s?? - the compiler
|
||||
.br
|
||||
~em/lib/em_a68s_init?? - compiler initialization
|
||||
.br
|
||||
~em/mach/lib/MACH/tail_a68s - runtime library
|
||||
.br
|
||||
~em/lang/a68s/a68s.1 - this manual
|
||||
.SH BUGS
|
||||
There is no
|
||||
.IR REAL
|
||||
arithmetic on the SUNs.
|
||||
.LP
|
||||
Excessive static nesting (especially with
|
||||
.IR ELIF s
|
||||
or
|
||||
.IR CASE s
|
||||
with many alternatives) can exceed certain stack spaces in the compiler.
|
||||
.LP
|
||||
Dimensions of arrays are limited to 8.
|
||||
.LP
|
||||
.SH SEE ALSO
|
||||
.TP
|
||||
ack(I)
|
||||
.SH REFERENCES
|
||||
.TP
|
||||
[1]
|
||||
P. G. Hibbard,
|
||||
.IR "A Sublanguage of ALGOL 68" ,
|
||||
SIGPLAN Notices Vol. 12, No. 5, May 1977.
|
||||
.TP
|
||||
[2]
|
||||
C. H. Lindsey and S. G. van der Meulen,
|
||||
.IR "Informal Introduction to ALGOL 68" ,
|
||||
North Holland.
|
||||
.TP
|
||||
[3]
|
||||
Wilfred J. Hansen and Hendrik Boom,
|
||||
.IR "The Report on the Standard Hardware"
|
||||
.IR "Representation for ALGOL 68" ,
|
||||
SIGPLAN Notices Vol. 12, No. 5, May 1977.
|
||||
Reference in New Issue
Block a user