The go-on symbol separates the phrases (declarations and units)
in serial clauses. The concrete syntax for the go-on symbol is almost
always the semicolon character ;
.
Consider for example the following closed clause, that consists on a serial clause with a declaration, a statement (voided assignation) and a final expression that determines the value of the serial clause:
(int t := x; x := y; t)
In Algol 68 the go-on symbol always implies serial elaboration. In the example above, the declaration is elaborated first, then the assignation and finally the final expression.
Strictly speaking, it is not legal to put extra go-on symbols after
the sequence of phrases: unlike in ALGOL 60, Algol 68 doesn’t support
the notion of “empty statement” (skip
is used for that
purpose instead) so the following code is invalid:
begin foo; bar; baz; end
However, some implementations are lenient and just emit a warning about the superfluous go-on symbol. That is the case of both GNU Algol 68 and Algol68 Genie.
Simplified [RR 3.2.1.b]:
b) SOID series: strong void unit, go on token, SOID series; declaration of DECS, go on token, SOID series LABSETY; label definition of LAB, series with LABSETY; completion token, label definition of LAB, series with LABSETY; SOID unit.