Category:ALGOL 68: Difference between revisions

 
(11 intermediate revisions by the same user not shown)
Line 25:
* http://www.compileonline.com/execute_algol_online.php
* Algol 68G is available as one of the languages at https://tio.run
 
==Tasks not implemented in ALGOL 68==
[[Tasks not implemented in ALGOL 68]]
 
==Grammar==
Line 65 ⟶ 68:
*Dec. 1968: Report on the Algorithmic Language ALGOL 68 - Offprint from Numerische Mathematik, 14, 79-218 (1969); Springer-Verlag. - Edited by: A. van Wijngaarden, B.J. Mailloux, J.E.L. Peck and C.H.A. Koster.
*Sep 1973: Revised Report on the Algorithmic Language Algol 68 - Springer-Verlag 1976 - Edited by: A. van Wijngaarden, B.J. Mailloux, J.E.L. Peck, C.H.A. Koster, M. Sintzoff, C.H. Lindsey, L.G.L.T. Meertens and R.G. Fisker.
==Coding style of samples, alphabets and stropping==
Click "Expand" for more details.
<div class="mw-collapsible mw-collapsed" style="width:1200px880px; overflow:auto; background-color:parent;">
<div class="mw-collapsible-content" style="padding-left:2em;">
 
Line 94 ⟶ 97:
FINISH
|}
<br><br>'''Alphabets'''
<br><br>
Notionally, Algol 68 source is written in two alphabets. The reserved words, mode indicants (type names) and operators that are non-symbolic (.e.g. '''and''', '''or''', ...) are generally referred to as "bold words" and usually shown in a bold font in literature. Words that are identifiers (used for "variable" names, procedure names, structure member names, ...) are in a separate, non-bold font.<br>
The [https://www.softwarepreservation.org/projects/ALGOL/manual/a68s.txt/view Manual for CMU ALGOL 68S (on softwarepreservation.org)] refers to the non-bold words as being in timid face.
<br><br>'''Examples of different program representations'''
<br><br>
At the time when ALGOL 68 was defined some predominant computers had
24 or 36 bit words, with 6 bit character sets. Hence it was desirable that
ALGOL 68 should be able to run on machines with only uppercase.
As multiple fonts were generally unavailable, a method of identifying the bold words was required.<br>
The official spec provided for different representations of the same
program.
program. Quote stropping (enclosing the bold words in single quotes)
and Point stropping (preceeding the bold words with a dot)
were used.<br>
were used. A variant of Point stropping called RES stropping was also defined.
In RES stropping some language-defined bold words are not preceded by a dot. <br>
A pragmatic comment may have been required to indicate which
stropping convention was to be used, as in some of the examples below.<br>
Upper stropping (representing the bold words by upper case and
non-bold words in lower case) was introduced by Algol 68R. Upper stropping<br>
Upper stropping is used by Algol 68RS and is one of the options for Algol 68G.<br>
Rutgers ALGOL 68 uses quote stropping. Most of the samples<br>
Most of the samples on Rosetta Code use Upper stropping.<br><br>
Examples (pragmatic comments to set the stropping regime not shown):
Example:
{|border="1" style="border-collapse: collapse; border: 5px2px double grey;" align="centerleft"
|| Algol68 as typically published
¢ bold/underline typeface ¢
'''mode''' '''xint''' = '''int''';
'''xint''' sum sq:=0;
Line 122 ⟶ 131:
sum sq+:=i↑2
'''od'''
|| quoteQUOTE stropping (similar to wiki)
'pr' quote 'pr'
'mode' 'xint' = 'int';
'xint' sum sq:=0;
Line 131 ⟶ 139:
sum sq+:=i↑2
'od'
|| POINT stropping
|| 7-bit/ascii compiler
.PR UPPER .PR
MODE XINT = INT;
XINT sum sq:=0;
FOR i WHILE
sum sq/=70*70
DO
sum sq+:=i**2
OD
|| 6-bits/byte compiler
.PR POINT .PR
.MODE .XINT = .INT;
.XINT SUM SQ:=0;
Line 150 ⟶ 148:
.OD
|| RES stropping
.PR RES .PR
mode .xint = int;
.xint sum sq:=0;
Line 159 ⟶ 156:
od
|| Upper stropping
# upper case = bold #
MODE XINT = INT;
XINT sum sq:=0;
Line 175 ⟶ 171:
<br>
Click "Expand" for more details.
<div class="mw-collapsible mw-collapsed" style="width:1200px880px; overflow:auto; background-color:parent;">
<div class="mw-collapsible-content" style="padding-left:2em;">
 
Line 201 ⟶ 197:
g
||Right hand side of:
* Identity-declarations, as "~" in: <langsyntaxhighlight algol68>REAL x = ~</langsyntaxhighlight>
* Initialisations, as "~" in: <langsyntaxhighlight algol68>REAL x := ~</langsyntaxhighlight>
Also:
* Actual-parameters of calls, as "~" in:<langsyntaxhighlight algol68>PROC: sin(~)</langsyntaxhighlight>
* Enclosed clauses of casts, as "~" in: <langsyntaxhighlight algol68>REAL(~)</langsyntaxhighlight>
* Units of routine-texts
* Statements yielding VOID
* All parts (but one) of a balanced clause
* One side of an identity relation, as "~" in: <langsyntaxhighlight algol68> ~ IS ~</langsyntaxhighlight>
|bgcolor=aaaaff rowspan=4 width="50px"| deproc- eduring
|bgcolor=aaeeaa rowspan=3 width="50px"| all '''soft''' then weak deref- erencing
Line 217 ⟶ 213:
|colspan=1 bgcolor=ffcccc|
Widening occurs if there is no loss of precision. For example: An INT will be coerced to a REAL, and a REAL will be coerced to a LONG REAL. But not vice-versa. Examples:
<langsyntaxhighlight algol68>INT to LONG INT
INT to REAL
REAL to COMPL
BITS to []BOOL
BYTES to STRING</langsyntaxhighlight>
A variable can also be coerced (rowed) to an array of length 1.
 
For example:
<langsyntaxhighlight algol68>INT to [1]INT
REAL to [1]REAL</langsyntaxhighlight> etc
|-
!F<br>
Line 233 ⟶ 229:
m
||
*Operands of formulas as "~" in:<langsyntaxhighlight algol68>OP: ~ * ~</langsyntaxhighlight>
*Parameters of transput calls
|colspan=3 bgcolor=ffcc99| Example:
<langsyntaxhighlight algol68>UNION(INT,REAL) var := 1</langsyntaxhighlight>
|-
!M<br>
Line 245 ⟶ 241:
* Trimscripts (yielding INT)
* Enquiries: e.g. as "~" in the following
<langsyntaxhighlight algol68>IF ~ THEN ... FI</langsyntaxhighlight> and
<langsyntaxhighlight algol68>FROM ~ BY ~ TO ~ WHILE ~ DO ... OD etc</langsyntaxhighlight>
* Primaries of calls (e.g. sin in sin(x))
|colspan=4 bgcolor=ffee99|Examples:
<langsyntaxhighlight algol68>REF REF BOOL to BOOL
REF REF REF INT to INT</langsyntaxhighlight>
|-
!W<br>
Line 257 ⟶ 253:
k
||
* Primaries of slices, as in "~" in: <langsyntaxhighlight algol68>~[1:99]</langsyntaxhighlight>
* Secondaries of selections, as "~" in: <langsyntaxhighlight algol68>value OF ~</langsyntaxhighlight>
|colspan=5 bgcolor=aaeeaa|Examples:
<langsyntaxhighlight algol68>REF BOOL to REF BOOL
REF REF INT to REF INT
REF REF REF REAL to REF REAL
REF REF REF REF STRUCT to REF STRUCT</langsyntaxhighlight>
|-
!S<br>
Line 269 ⟶ 265:
f<br>
t
|| The LHS of assignments, as "~" in: <langsyntaxhighlight algol68>~ := ...</langsyntaxhighlight>
|colspan=6 bgcolor=aaaaff| Example:
* deproceduring of: <langsyntaxhighlight algol68>PROC REAL random: e.g. random</langsyntaxhighlight>
|}
For more details about Primaries and Secondaries refer to [[Operator_precedence#ALGOL_68|Operator precedence]].
Line 288 ⟶ 284:
 
== Library code used in Rosetta Code samples ==
[https://rosettacode.org/wiki/Category:ALGOL_68-primes/prelude PrimeVarious related(including the standard prelude)]<br/>
[https://rosettacode.org/wiki/Category:ALGOL_68-primes Prime related]<br/>
<br>
[https://rosettacode.org/wiki/Category:ALGOL_68-rows Row (array) related]<br/>
[https://rosettacode.org/wiki/Category:ALGOL_68-l-system L-System related]
 
== Tools ==
[[Syntax_highlighting_using_Mediawiki_formatting#ALGOL 68|Format an upper-stropped Algol 68 source with Mediawiki markup]]<br/>
[[Compiler/Simple_file_inclusion_pre_processor#ALGOL 68|Implement ''read'' and ''include'' pragmatic-comments for compilers that don't support file inclusion]]
 
{{language programming paradigm|Concurrent}}
3,028

edits