热门问题
时间线
聊天
视角
ALGOL W
来自维基百科,自由的百科全书
Remove ads
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]。
Remove ads
語法和語義
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⟩
(即在浮點值上進行整數除法)是無效的語法實體。
Remove ads
例子
下面例子展示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
Remove ads
引用
外部連結
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads