123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418 |
- .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.
|