- ...
CHAR
:2.1
- The
a68toc
compiler insists on a semicolon between identity declarations for
different modes. In the above case, you would have to write
INT ninety nine=99 ; CHAR x = "X"
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
symbol).2.2
- The a68toc
compiler does permit a subsequent declaration to use the value of a
previous value, but it is strictly non-standard. You would be wise to
restrict your programs to Algol 68 syntax because other Algol 68
compilers will not necessarily be so lax.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
screen.2.3
- When Algol 68 was first implemented there were few
monitors around, so print literally printed its output onto
paper.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... case.3.1
- The standard
prelude supplied with the Linux port of the a68toc compiler
provides a means of specifying what should be done if integer
overflow occurs. See section 13.3.13 for the details.
Likewise for “floating-point overflow” and “floating-point
underflow”, see section 13.6.1.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... declared.4.1
- However, the
a68toc Algol 68 compiler limits the
number of dimensions to three. If you try to declare rows having more
than three dimensions, the translation proceeds without error
messages, but the resulting C code will fail to compile.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...subscript4.2
- From the
practice of mathematicians who write
x1, x2,...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... on4.3
- but
a68toc will only accept multiples of
upto three dimensions.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... write4.4
- Unfortunately,
there is a bug in the a68toc
compiler which prevents you from using a denotation after
BY. Nor does BY (2) or BY +2 work.
However, BY -2 or BY -2 does work. For other ways see chapter 6.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... form5.1
- Some editors insert a different character when you press
the key marked |. Check that the character produced is
accepted by the Algol 68 compiler.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... operand.5.2
- The
a68toc compiler
generates code which will cause a run-time fault if your program
tries to execute an ELSE part which has been omitted. You can
get around that bug by explicitly writing ELSE SKIP.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
printed:5.3
- The a68toc compiler objects to this with a run-time
error. Ensure that at least OUT SKIP occurs in
every case clause.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
INT
.6.1
- Historically,
programmers were more interested in the value referred to than the
name (Algol 68 was the first language to distinguish clearly between
a name and the value referred to), so the generator is followed by
the mode of the value to which the name will refer.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... same.6.2
- Provided that both identifiers appear in
the same range.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...PLUSAB@PLUSAB.6.3
- PLUSAB
stands for “plus-and-becomes”. When Algol 68 was first designed,
people were more concerned with the values referred to than the
names, so PLUSAB was intended to describe what happens to
the value referred to. Bearing in mind the principle of value
integrity, the value
referred to by a does not become anything, but is replaced by
its value plus 1.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... exercises.6.4
- The
a68toc compiler requires that you write semicolons
instead of commas to separate these three declarations.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... Then6.5
- But because the two sides of an
assignment are elaborated collaterally, the RHS might be elaborated
before the LHS or even in parallel.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... declaration6.6
- The Revised Report mentions a
“ghost element” in this context (see section
10.11 for details)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... input.6.7
- Console input is better handled using
the kbd channel described in section
13.7.2.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... line.6.8
- See section 9.4 for
details of string terminators.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... globally7.1
- The phrase
“names declared globally” is intended to mean here that the names
have been declared in a range which encloses the routine, not that
HEAP has necessarily been used in the declaration. We use
the phrase “a global name” in the latter case.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
2
.7.2
- In chapter 3, we mentioned a bug
in the a68toc Algol 68 compiler
connected with the BY construct in loop clauses. Using the
B operator is another way of getting round the bug.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... example:7.3
- A compiler which implements the
Algol 68 defined by the Revised Report would not have to resort to
this device because the declaration of each procedure would be
available everywhere in the enclosing range (but see
section 6.3.6).
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
[1:10]
.8.1
- Unfortunately,
there is a bug in the a68toc compiler
whereby this selection (and similar selections) are disallowed.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
[1:100]
.8.2
- But
this is disallowed by the a68toc compiler.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
irrelevant.9.1
- Unfortunately, for the
a68toc compiler, this is
not true.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... declarations.9.2
- But not
for the a68toc compiler.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
mode.9.3
- Note that an Algol 68 union is quite different from a
C union. The latter is simply a remapping of a piece of memory. In an
Algol 68 union, where the underlying value is kept is the business of
the compiler and it cannot be remapped by the programmer.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... file.10.1
- In Linux, a
file has the mode, more-or-less, REF BOOK.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
closed10.2
- Unless you know what you are doing!
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
BITS
10.3
- This mode is described in section
11.2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
INT
)10.4
- NUMBER is defined for
more modes than REAL and INT which you will meet in
chapter 11.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... line.10.5
- The start of a
book in the QAD transput is zero.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... mistakes11.1
- You
should expect to make one mistake every 20 lines. Congratulate
yourself if you do better!
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... met.11.2
- Note that a serial clause is
not an enclosed clause.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... are11.3
- The
a68toc
compiler does not provide collateral clauses other than row-
and structure-displays.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... parallel.11.4
- The
a68toc compiler does not
provide parallel clauses.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... fail11.5
- The a68toc compiler will wrongly allow this last
assignment both at compile-time and run-time.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
“little-endian”12.1
- These terms come from the book by Jonathan
Swift entitled “Gulliver's Travels” and they refer to the habit of
some people of eating boiled eggs at the “big” end or the
“little” end!
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... upside-down12.2
- The remainder of the intriguing
limerick runs as follows:-
Who ate sour apples and died.
The apples fermented inside the lamented
and made cider inside 'er inside.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... order12.3
- but only if the
tree is reasonably balanced
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
errors.13.1
- One way of avoiding this sort of error is to use
“lexical” highlighting with your favourite editor. A missing quote
or sharp will cause large amounts of your program to be displayed as
a string denotation or a comment.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
completed.13.2
- Various schemes have been developed for
documenting a program as it is written, They are often called
“literate programming”.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... C modes13.3
- C people call
them types.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
declarations13.4
- typedefs
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
macro13.5
- A synonym for another piece of text which is expanded
by the C preprocessor
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... address)13.6
- The VECTOR mode is not limited
to CHAR. You can use it for any mode. See section
13.5.1 for details
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
prelude14.1
- QAD stands for “quick-and-dirty” and was supposed
to represent the provided standard prelude. While it is not entirely
standard (as far as Algol 68 is concerned), it was certainly not
implemented quickly!
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... windows.14.2
- See the file
/usr/share/doc/xtermcontrol/ctlseqs.txt.gz for the latter.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.