ALGOL W

ALGOL W,一種程式語言,為ALGOL家族的一份子。它基於尼克勞斯·維爾特與東尼·霍爾在針對ALGOL X所提出的草案而設計,希望能作為ALGOL 60的後繼者。經過小幅度的修改,在史丹福大學,尼克勞斯·維爾特利用IBM System/360機器,以PL360實作出第一版的ALGOL W。

ALGOL W是原本ALGOL 60的相对简单的升级,它增加了字符串、位串、复数、到记录数据类型的引用,和传结果调用的参数传递,介入了while语句,将switch替代为case语句,并在总体上的紧实了这门语言。它的編譯器是用尼克勞斯·維爾特所設計的PL360組語所寫成。

语法和语义
ALGOL W的建造在EBCDIC字符编码集的子集之上。在ALGOL 60中,保留字是独立的词法项目,但是在ALGOL W中它们只是字符序列,而不需要被起来。保留字和标识符由空格分隔,采用了类似于巴科斯-诺尔范式(BNF)的定义了ALGOL W。这种形式文法是的先驱。

大量的ALGOL W语义是在文法上定义的:

  • 标识符由它们在当前作用域内的定义来区分。例如,⟨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)

引用
外部链接
*[https://web.archive.org/web/20100523150449/http://www.jampan.co.nz/~glyn/ aw2c] – ALGOL W compiler for Linux
*[https://tiddly-pom.com/~glyn/ awe] – aw2c updated version
*[https://everything2.com/title/Algol+W?searchy=search 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
*[http://bitsavers.org/pdf/stanford/listing/Algol_W_Listing_Nov69.pdf 1969 ALGOL W compiler listing] at bitsavers.org

*[http://www.algol60.org/15algolwlego.htm Algol W materials] More than 200 Algol W programs and documentation

评论 (0)

  • 还没有评论,来抢沙发吧。