ALGOL W

From Wikipedia, the free encyclopedia
  (Redirected from Algol W)
Jump to: navigation, search
ALGOL W
Paradigms procedural, imperative, structured
Developer Niklaus Wirth, C. A. R. Hoare
Appeared in 1966; 48 years ago (1966)
Influenced by ALGOL 60
Influenced Pascal

ALGOL W is a programming language. It was based on a proposal for ALGOL X by Niklaus Wirth and C. A. R. Hoare as a successor to ALGOL 60 in IFIP Working Group 2.1. When the committee decided that the proposal was not a sufficient advance over ALGOL 60, the proposal was published as A contribution to the development of ALGOL.[1] After making small modifications to the language[2] Wirth supervised a high quality implementation for the IBM/360 at Stanford University that was widely distributed.[3]

It represented a relatively conservative modification of ALGOL 60, adding string, bitstring, complex number and reference to record datatypes and call-by-result passing of parameters, introducing the while statement, replacing switch with the case statement, and generally tightening up the language.

The implementation was written in PL/360, an ALGOL-like assembly language designed by Wirth. The implementation included influential debugging and profiling abilities.

Syntax and semantics[edit]

ALGOL W's syntax is built on a subset of the EBCDIC character set. In ALGOL 60 reserved words are distinct lexical items, but in ALGOL W they are merely sequences of characters, and do not need to be stropped. Reserved words and identifiers are separated by spaces.[3] In these ways ALGOL W's syntax resembles that of Pascal and later languages.

The Algol W Language Description[4] defines Algol W in an affix grammar that resembles BNF. This grammar was a precursor of the Van Wijngaarden grammar.[1][5]

Much of Algol W's semantics is defined grammatically:[4]

  • Identifiers are distinguished by their definition within the current scope. For example, a ⟨procedure identifier⟩ is an identifier that has been defined by a procedure declaration, a ⟨label identifier⟩ is an identifier that is being used as a goto label.
  • The types of variables and expressions are represented by affixes. For example ⟨τ function identifier⟩ is the syntactic entity for a function that returns a value of type τ, if an identifier has been declared as an integer function in the current scope then that is expanded to ⟨integer function identifier⟩.
  • Type errors are grammatical errors. For example "⟨integer expression⟩ / ⟨integer expression⟩" and "⟨real expression⟩ / ⟨real expression⟩" are valid but distinct syntactic entities that represent expressions, but "⟨real expression⟩ DIV ⟨integer expression⟩" (i.e. integer division performed on a floating-point value) is an invalid syntactic entity.

Example[edit]

This demonstrates ALGOL W's record type facility.

RECORD PERSON (
    STRING(20) NAME; 
    INTEGER AGE; 
    LOGICAL MALE; 
    REFERENCE(PERSON) FATHER, MOTHER, YOUNGESTOFFSPRING, ELDERSIBLING
);

REFERENCE(PERSON) PROCEDURE YOUNGESTUNCLE (REFERENCE(PERSON) R);
    BEGIN
        REFERENCE(PERSON) P, M;
        P := YOUNGESTOFFSPRING(FATHER(FATHER(R)));
        WHILE (P ¬= NULL) AND (¬ MALE(P)) OR (P = FATHER(R)) DO
            P := ELDERSIBLING(P);
        M := YOUNGESTOFFSPRING(MOTHER(MOTHER(R)));
        WHILE (M ¬= NULL) AND (¬ MALE(M)) DO
            M := ELDERSIBLING(M);
        IF P = NULL THEN 
            M 
        ELSE IF M = NULL THEN 
            P 
        ELSE 
            IF AGE(P) < AGE(M) THEN P ELSE M
    END

References[edit]

  1. ^ a b Niklaus Wirth & C. A. R Hoare (1966) A contribution to the development of ALGOL. Communications of the ACM, Vol.9, pp. 413 - 432
  2. ^ Niklaus Wirth (1966), Additional notes on "A Contribution to the Development of ALGOL", ALGOL Bulletin, Number 24 pp. 13 - 17.
  3. ^ a b Stanford Computer Science Department Technical Report CS-TR-68-89 (Various documents for Stanford University's 1972 implementation of ALGOL W; this report includes the ALGOL W Language Description.)
  4. ^ a b Algol W Language Description, June 1972
  5. ^ Adriaan van Wijngaarden (1965), Orthogonal Design and Description of a Formal Language,MR76 Mathematical Centre, Amsterdam

External links[edit]