Category:ALGOL 68: Difference between revisions
m (→Grammar: http://www.softwarepreservation.org/projects/ALGOL/book/Lindsey_van_der_Meulen-IItA68-Revised-SyntaxOnly.pdf/view) |
(→Coercion (casting): more details) |
||
Line 143:
ALGOL 68 has a hierarchy of contexts which determine which kind of
coercions are available at a particular point in the program. These contexts are:
{|class="wikitable"
* soft - deproceduring▼
! Context name !! Coercions applied in this context !! Context location !! Coercion examples
|-
|| The LHS of assignments, as in: <lang algol68>:=</lang>
* strong - firm, followed by widening, rowing or voiding▼
||
* deproceduring of: <lang algol68>PROC REAL random: e.g. random</lang>
|-
of precision. For example: An INT will be coerced to a REAL, and a REAL will be▼
|weak || all ''soft'' above then weak dereferencing
||
* INT to REAL▼
* Primaries of slices
* REAL to COMPL▼
* Secondaries of selections, as in: <lang algol68>OF</lang>
* BITS to []BOOL▼
||
* BYTES to STRING▼
<lang algol68>REF REF REF INT to REF INT</lang>
|-
|meek
|| all ''weak'' above then dereferencing
||
* Trimscripts (yielding INT)
* Enquiries: e.g. "~" in the following<lang algol68>IF ~ THEN ... FI</lang> and <lang algol68>FROM ~ BY ~ TO ~ WHILE ~ DO ... OD etc</lang>
* Primaries of calls (e.g. sin in sin(x))
||
|-
|firm || all ''meek'' then uniting
||
*Operands of formulas
*Parameters of transput calls
|| e.g. <lang algol68>UNION(INT,REAL) var := 1</lang>
|-
||strong
||Right hand side of:
* Identity-declarations :=:
* Initialisations
Also:
* Actual-parameters of calls
* Enclosed clauses of casts
* Units of routine-texts
* Statements yielding VOID
* All parts (but one) of a balanced clause
* One side of an identity relation
▲||Widening occures 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:
<lang algol68>INT to LONG INT
A variable can also be coerced (rowed) to an array of length 1. For example:
|}
For more details about Primaries and Secondaries refer to [[Operator_precedence#ALGOL_68|Operator precedence]].
▲* REF REF REAL to REAL
== Code Specimen ==
{{language programming paradigm|Concurrent}}
|
Revision as of 11:21, 23 April 2013
![Language](http://static.miraheze.org/rosettacodewiki/thumb/2/2c/Algol68.png/64px-Algol68.png)
![Language](http://static.miraheze.org/rosettacodewiki/thumb/2/27/Rcode-button-language-crushed.png/64px-Rcode-button-language-crushed.png)
This programming language may be used to instruct a computer to perform a task.
Parameter passing methods: | By reference, By value |
---|---|
Type safety: | Safe |
Type strength: | Soft, weak, meek, firm and strong - depending on context. |
Type compatibility: | Structural |
Type expression: | Explicit |
Type checking: | Dynamic, Static |
See Also: |
ALGOL 68 (short for ALGOrithmic Language 1968) is an imperative computer programming language that was conceived as a successor to the ALGOL 60 programming language, designed with the goal of a much wider scope of application and more rigorously defined syntax and semantics.
The main aims and principles of design of ALGOL 68:
- Completeness and clarity of design,
- Orthogonal design,
- Security,
- Efficiency:
- Static mode checking,
- Mode-independent parsing,
- Independent compilation,
- Loop optimization,
- Representations - in minimal & larger character sets.
Execute an ALGOL 68 program online
Grammar
The grammar for ALGOL 68 is officially in the two level, Van Wijngaarden grammar but a subset has been done in the one level Backus–Naur Form:
- Van Wijngaarden grammar: [1]
- Backus–Naur Form/Yacc: [2]
- Syntax Chart (Size 516.6 kB - File type application/pdf)
Resources
- ALGOL BULLETIN - March 1959 to August 1988, in 52 issues[3]
- Algol68 mailinglist - December 2008 - algol68-user AT lists.sourceforge.net[4]
FYI: There are two online manual pages:
Or - if you prefer a hardcopy - you can try and pick up a hard cover manual like "Informal Introduction to Algol 68" - by C. H. Lindsey & S. V. Vander Meulen. Be sure to get the 1977 edition:
- www.amazon.com - Aboout $119
- barnesandnoble.com - about $40
IItA68 is a beautiful book, and makes great "bedtime" reading... Highly recommended!
Editor modes:
- Emacs mode for Algol 68 supporting syntax highlighting and context-sensitive indentation.
- Vim script providing support for syntax colouring.
Status
- 20th December 1968 - ALGOL 68's Final Report was ratified by UNESCO's IFIP working group 2.1 in Munich.
- 20th December 2008 - Zig Zag - the 100th ALGOL 68 code contribution on rosettacode.org!
- Happy 40th Birthday ALGOL 68,
- AND 50th Birthday ALGOL 58.
- 23rd August 2009 - algol68g-1.18.0-9h released
- 20th December 2009 - Happy 51st/41st Birthdays with Hamming numbers - the 200th ALGOL 68 code contribution on rosettacode.org!
- This time code was by Marcel van der Veer, author of Algol 68 Genie
- 25th October 2011 - Jejones3141 added Soundex - the 300th ALGOL 68 code specimen.
Revisions
- Mar. 1968: Draft Report on the Algorithmic Language ALGOL 68 - Edited by: A. van Wijngaarden, B.J. Mailloux, J.E.L. Peck and C.H.A. Koster.
- Oct. 1968: Penultimate Draft Report on the Algorithmic Language ALGOL 68 - Chapters 1-9 - Edited by: A. van Wijngaarden, B.J. Mailloux, J.E.L. Peck and C.H.A. Koster.
- 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.
Code samples
Most of the code samples provided here have a leading main:(
and a matching )
at the end. These are not actually required in the language, but are included so as to highlight that the code sample is complete, and works with (at least) ALGOL 68G unmodified.
On some compilers, it may be necessary to include appropriate "job cards" or precludes in order for the programs to compile successfully. Hopefully not too much else is required. Examples:
Brief Algol68 | Algol68 as in rosettacode | Actual ELLA Algol 68RS code |
print(("Hello, world!",new line)) |
main:( print(("Hello, world!",new line)) ) |
PROGRAM helloworld CONTEXT VOID USE standard BEGIN print(("Hello, world!", new line)) END FINISH |
Example of different program representations
At the time when ALGOL 68 was defined some predominant computers had 36 bit words, and 6 bit character sets. Hence it was desirable that ALGOL 68 should be able to run on machines with only uppercase. Hence the official spec provided for different representations of the same program. Example:
Algol68 as typically published
¢ bold/underline typeface ¢ mode xint = int; xint sum sq:=0; for i while sum sq≠70×70 do sum sq+:=i↑2 od |
quote stropping (similar to wiki)
'pr' quote 'pr' 'mode' 'xint' = 'int'; 'xint' sum sq:=0; 'for' i 'while' sum sq≠70×70 'do' sum sq+:=i↑2 'od' |
Code for a 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 |
Code for a 6-bits/byte compiler
.PR POINT .PR .MODE .XINT = .INT; .XINT SUM SQ:=0; .FOR I .WHILE SUM SQ .NE 70*70 .DO SUM SQ .PLUSAB I .UP 2 .OD |
Algol68 using RES stropping
.PR RES .PR mode .xint = int; .xint sum sq:=0; for i while sum sq≠70×70 do sum sq+:=i↑2 od |
Coercion (casting)
ALGOL 68 has a hierarchy of contexts which determine which kind of coercions are available at a particular point in the program. These contexts are:
Context name | Coercions applied in this context | Context location | Coercion examples |
---|---|---|---|
soft | deproceduring | The LHS of assignments, as in: <lang algol68>:=</lang> |
|
weak | all soft above then weak dereferencing |
|
<lang algol68>REF REF REF INT to REF INT</lang> |
meek | all weak above then dereferencing |
|
<lang algol68>REF REF REF REAL to REAL</lang> |
firm | all meek then uniting |
|
e.g. <lang algol68>UNION(INT,REAL) var := 1</lang> |
strong | all firm followed by widening, rowing or voiding | Right hand side of:
Also:
|
Widening occures 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:
<lang algol68>INT to LONG INT INT to REAL REAL to COMPL BITS to []BOOL BYTES to STRING</lang> A variable can also be coerced (rowed) to an array of length 1. For example: <lang algol68>INT to [1]INT REAL to [1]REAL</lang> etc |
For more details about Primaries and Secondaries refer to Operator precedence.
Code Specimen
Subcategories
This category has the following 3 subcategories, out of 3 total.
@
- ALGOL 68 Implementations (9 P)
- ALGOL 68 User (8 P)
Pages in category "ALGOL 68"
The following 200 pages are in this category, out of 1,021 total.
(previous page) (next page)S
- Sierpinski carpet
- Sierpinski square curve
- Sierpinski triangle
- Sierpinski triangle/Graphical
- Sieve of Eratosthenes
- Singly-linked list/Element definition
- Singly-linked list/Element insertion
- Singly-linked list/Element removal
- Singly-linked list/Reversal
- Singly-linked list/Traversal
- Sisyphus sequence
- Sleep
- Sleeping Beauty problem
- Smallest multiple
- Smallest number k such that k+2^m is composite for all m less than k
- Smallest numbers
- Smallest power of 6 whose decimal expansion contains n
- Smallest square that begins with n
- Smarandache prime-digital sequence
- Smith numbers
- Snake and ladder
- Soloway's recurring rainfall
- Solve a Holy Knight's tour
- Solve equations with substitution method
- Solve hanging lantern problem
- Solve triangle solitaire puzzle
- Sort an array of composite structures
- Sort an integer array
- Sort numbers lexicographically
- Sort primes from list to a list
- Sort the letters of string in alphabetical order
- Sort three variables
- Sort using a custom comparator
- Sorting algorithms/Bogosort
- Sorting algorithms/Bubble sort
- Sorting Algorithms/Circle Sort
- Sorting algorithms/Cocktail sort
- Sorting algorithms/Cocktail sort with shifting bounds
- Sorting algorithms/Comb sort
- Sorting algorithms/Counting sort
- Sorting algorithms/Cycle sort
- Sorting algorithms/Gnome sort
- Sorting algorithms/Heapsort
- Sorting algorithms/Insertion sort
- Sorting algorithms/Merge sort
- Sorting algorithms/Pancake sort
- Sorting algorithms/Quicksort
- Sorting algorithms/Radix sort
- Sorting algorithms/Selection sort
- Sorting algorithms/Shell sort
- Sorting algorithms/Stooge sort
- Soundex
- Special characters
- Special divisors
- Special factorials
- Special neighbor primes
- Special pythagorean triplet
- Special variables
- Spelling of ordinal numbers
- Sphenic numbers
- Spinning rod animation/Text
- Spiral matrix
- Split a character string based on change of character
- Square but not cube
- Square form factorization
- Square-free integers
- Stack
- Stair-climbing puzzle
- Start from a main routine
- Statistics/Basic
- Steady squares
- Steffensen's method
- Stem-and-leaf plot
- Stern-Brocot sequence
- Stirling numbers of the first kind
- Stirling numbers of the second kind
- Straddling checkerboard
- Strange numbers
- Strange plus numbers
- Strange unique prime triplets
- Stream merge
- String append
- String case
- String comparison
- String concatenation
- String interpolation (included)
- String length
- String matching
- String prepend
- Strip a set of characters from a string
- Strip comments from a string
- Strip control codes and extended characters from a string
- Strip whitespace from a string/Top and tail
- Strong and weak primes
- Sturmian word
- Sub-unit squares
- Subleq
- Substitution cipher
- Substring
- Substring primes
- Substring/Top and tail
- Successive prime differences
- Sudan function
- Sudoku
- Sum and product of an array
- Sum and product puzzle
- Sum data type
- Sum digits of an integer
- Sum multiples of 3 and 5
- Sum of a series
- Sum of divisors
- Sum of elements below main diagonal of matrix
- Sum of first n cubes
- Sum of primes in odd positions is prime
- Sum of square and cube digits of an integer are primes
- Sum of squares
- Sum of the digits of n is substring of n
- Sum of two adjacent numbers are primes
- Sum to 100
- Summarize primes
- Summation of primes
- Sylvester's sequence
- Symmetric difference
- Synchronous concurrency
- Syntax highlighting using Mediawiki formatting
- System time
T
- Table creation/Postal addresses
- Tau function
- Tau number
- Temperature conversion
- Terminal control/Clear the screen
- Ternary logic
- Test integerness
- Text between
- Text processing/1
- Text processing/Max licenses in use
- Textonyms
- The Name Game
- The sieve of Sundaram
- The Twelve Days of Christmas
- Thiele's interpolation formula
- Thue-Morse
- Tokenize a string
- Tokenize a string with escaping
- Top rank per group
- Total circles area
- Totient function
- Towers of Hanoi
- Trabb Pardo–Knuth algorithm
- Tree traversal
- Triangular numbers
- Trigonometric functions
- Triplet of three numbers
- Tropical algebra overloading
- Truncatable primes
- Truth table
- Tupper's self-referential formula
- Twin primes
- Two identical strings
- Two sum
- Two's complement
U
- Ulam numbers
- Ulam spiral (for primes)
- Ultra useful primes
- Undefined values
- Undulating numbers
- Unicode strings
- Unicode variable names
- Unique characters
- Unique characters in each string
- Unprimeable numbers
- Untouchable numbers
- UPC
- Upside-down numbers
- URL decoding
- URL encoding
- URL parser
- Useless instructions
- User defined pipe and redirection operators
- User input/Text
V
- Parameter passing/By reference
- Parameter passing/By value
- Typing/Safe
- Typing/Soft, weak, meek, firm and strong - depending on context.
- Typing/Compatibility/Structural
- Typing/Expression/Explicit
- Typing/Checking/Dynamic
- Typing/Checking/Static
- Programming Languages
- Programming paradigm/Concurrent
- Programming paradigm/Imperative