ALGOL W
外观
编程范型 | 多范型:过程式, 指令式, 结构化 |
---|---|
语言家族 | ALGOL |
设计者 | Niklaus Wirth, Tony Hoare |
发行时间 | 1966年 |
型态系统 | 静态, 强类型 |
作用域 | 词法 |
实作语言 | PL360 |
系统平台 | IBM System/360 |
受影响于 | |
ALGOL 60, ALGOL X | |
影响语言 | |
Pascal, Modula-2 |
ALGOL W,一种编程语言,为ALGOL家族的一分子。它基于尼克劳斯·维尔特与东尼·霍尔在IFIP Working Group 2.1针对ALGOL X所提出的草案而设计,希望能作为ALGOL 60的后继者[1]。经过小幅度的修改[2],在斯坦福大学,尼克劳斯·维尔特利用IBM System/360机器,以PL360实作出第一版的ALGOL W[3][4]。
ALGOL W是原本ALGOL 60的相对简单的升级,它增加了字符串、位串、复数、到记录数据类型的引用,和传结果调用的参数传递,介入了while
语句,将switch
替代为case
语句,并在总体上的紧实了这门语言。它的编译器是用尼克劳斯·维尔特所设计的PL360组语所写成[5]。
语法和语义
[编辑]ALGOL W的语法建造在EBCDIC字符编码集的子集之上。在ALGOL 60中,保留字是独立的词法项目,但是在ALGOL W中它们只是字符序列,而不需要被索绕起来。保留字和标识符由空格分隔[3]。在这种方式下,ALGOL W的语法类似于Pascal和后来的语言。
《ALGOL W语言描述》[6],采用了类似于巴科斯-诺尔范式(BNF)的附缀文法定义了ALGOL W。这种形式文法是van Wijngaarden文法的先驱[1][7]。
大量的ALGOL W语义是在文法上定义的[6]:
- 标识符由它们在当前作用域内的定义来区分。例如,
⟨procedure identifier⟩
是由过程声明定义的标识符,⟨label identifier⟩
是用作goto标签的标识符。 - 变量和表达式的类型通过附缀来的表示。例如,
⟨τ function identifier⟩
是针对返回类型τ
的值的函数的一个语法实体,如果这个标识符已经在当前作用域内被声明为整数函数,那么它被展开为⟨integer function identifier⟩
。 - 类型错误是文法错误。例如,
⟨integer expression⟩ / ⟨integer expression⟩
和⟨real expression⟩ / ⟨real expression⟩
是表示表达式的有效而不同的语法实体,但是⟨real expression⟩ DIV ⟨integer expression⟩
(即在浮点值上进行整数除法)是无效的语法实体。
例子
[编辑]下面例子展示ALGOL W的记录类型设施:
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
引用
[编辑]- ^ 1.0 1.1 Wirth, Niklaus; Hoare, C. A. R. A contribution to the development of ALGOL. Communications of the ACM. June 1966, 9 (6): 413–432 [2020-10-07]. S2CID 11901135. doi:10.1145/365696.365702
–通过Association for Computing Machinery.
- ^ Niklaus Wirth. Additional notes on "A Contribution to the Development of ALGOL. ALGOL Bulletin, Number 24 pp. 13 - 17. 1966.
- ^ 3.0 3.1 Bauer, Henry R.; Becker, Sheldon I.; Graham, Susan L.; Forsythe, George E.; Satterthwaite, Edwin H. Technical Report Number: CS-TR-68-89. Computer Science Department (报告) (Stanford University). March 1968. (Various documents for Stanford's 1972 implementation of ALGOL W; this report includes the ALGOL W Language Description.
- ^ Sites, Richard. ALGOL W Reference Manual (PDF). i.stanford.edu. Stanford University. [24 July 2022].
- ^ PL360(REVISED) A PROGRAMMING LANGUAGE FOR THE IBM 360. (PDF). [2020-05-16]. (原始内容存档 (PDF)于2016-03-04).
- ^ 6.0 6.1 Bauer, Henry R.; Becker, Sheldon I.; Graham, Susan L.; Satterthwaite, Edwin H.; Sites, Richard L. ALGOL W Language Description (PDF) (报告). June 1972.
- ^ van Wijngaarden, Adriaan. Orthogonal Design and Description of a Formal Language: MR76 (PDF) (报告). Amsterdam, Netherlands: Mathematical Centre. 22 October 1965 [2020-10-07]. (原始内容 (PDF)存档于29 October 2019) –通过Ernst-Abbe-Hochschule Jena, University of Applied Sciences, Germany.
外部链接
[编辑]- aw2c – ALGOL W compiler for Linux
- awe(页面存档备份,存于互联网档案馆) – aw2c updated version
- ALGOL W @ Everything2 (页面存档备份,存于互联网档案馆) – informal but detailed description of the language by a former user, with sidebars extolling ALGOL W over Pascal as an educational programming language
- 1969 ALGOL W compiler listing(页面存档备份,存于互联网档案馆) at bitsavers.org
- The Michigan Terminal System Manuals, Volume 16: ALGOL W in MTS(页面存档备份,存于互联网档案馆)
- Algol W materials(页面存档备份,存于互联网档案馆) More than 200 Algol W programs and documentation