ALGOL W

出自Local Chinese Wikipedia
跳至導覽 跳至搜尋
ALGOL W
編程範型多范型過程式, 指令式, 結構化
語言家族ALGOL
設計者Niklaus Wirth, Tony Hoare
釋出時間1966年,​60年前​(1966
當前版本
    Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
    型態系統靜態, 強類型
    作用域詞法
    實作語言PL360
    系統平台IBM System/360
    網站{{URL|example.com|可选的显示文本}}Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
    受影響於
    ALGOL 60, ALGOL X
    影響語言
    Pascal, Modula-2

    ALGOL W,一種程式語言,為ALGOL家族的一份子。它基於尼克勞斯·維爾特東尼·霍爾IFIP Working Group 2.1英語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的語法英語Syntax (programming languages)建造在EBCDIC字符編碼集的子集之上。在ALGOL 60中,保留字是獨立的詞法項目,但是在ALGOL W中它們只是字符序列,而不需要被索繞英語Stropping (syntax)起來。保留字和標識符由空格分隔[3]。在這種方式下,ALGOL W的語法類似於Pascal和後來的語言。

    《ALGOL W語言描述》[6],採用了類似於巴科斯-諾爾範式(BNF)的附綴文法英語affix grammar定義了ALGOL W。這種形式文法van Wijngaarden文法英語Van Wijngaarden grammar的先驅[1][7]

    大量的ALGOL W語義是在文法上定義的[6]

    • 標識符由它們在當前作用域內的定義來區分。例如,⟨procedure identifier⟩是由過程聲明定義的標識符,⟨label identifier⟩是用作goto標籤的標識符。
    • 變量表達式英語Expression (computer science)類型通過附綴來的表示。例如,⟨τ 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. 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. 
    2. Niklaus Wirth. Additional notes on "A Contribution to the Development of ALGOL. ALGOL Bulletin, Number 24 pp. 13 - 17. 1966. 
    3. 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.
    4. Sites, Richard. ALGOL W Reference Manual (PDF). i.stanford.edu. Stanford University. [24 July 2022]. 
    5. PL360(REVISED) A PROGRAMMING LANGUAGE FOR THE IBM 360. (PDF). [2020-05-16]. (原始內容存檔 (PDF)於2016-03-04). 
    6. 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. 
    7. 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. 

    外部連結[編輯]

    Module:Authority_control第183行Lua錯誤:attempt to index field 'wikibase' (a nil value)