除了程式語言之外,沃思在其他方面也有許多創造。為了定義和描述語言,沃思對著名的「巴科斯-諾爾正規化」bnf進行了擴充,成為ebnf(extended bnf)。我們目前所看到的許多語言的 bnf實際上是ebnf,不過人們往往忽略掉這個e字。和bnf一起出現的,還常常有一些看上去像鐵路圖那樣的圖形,稱作「語法圖」(syntax chart或 syntax diagram)或「鐵路圖」(railroad diagram),這也是由沃思所設計與發明的,這種圖形標記法的描述能力等價於bnf,但當然更易於閱讀與理解,更加直觀。在語法圖中,用圓圈表示終結符,用方框表示非終結符,用有向弧表示走向,圖上一條通路就表示該語法結構的一種正確定義方法。語法圖的4種基本構造方法如下。
(1) 若產生式為w→w1w2w3,則語法圖如圖1。
(2) 若產生式為w→w1w2|w3a|bcw4 ,則語法圖如圖2。
(3) 若產生式為w→abw,則語法圖如圖3。
(4) 若產生式為w→ab|abw,則語法圖如圖4。
對於較複雜的產生式,其語法圖一般可通過上述4種語法圖進行組合而得。
在對上下文無關文法的研究中,乙個很重要的問題是如何確定兩個符號之間的優先關係。現在一般採用的辦法也是由沃思和他的同事韋伯提出來的,就叫沃思-韋伯優先關係(wirth- weber precedence relation),或叫簡單優先關係。它規定上下文無關文法 g中任意兩個符號的優先關係如下。
(1)x y,當且僅當有產生式 a→αbyβ,且有推導b+→rx及y →*aδ。
其中a、b為非終結符,x、y為待定優先關係的兩個任意符號,α、β、υ和δ為由終結符和非終結符組成的任意符號串,可以是空串。a是終結符。
沃思的學術著作很多,主要有如下幾種,其中一些原版是用德文寫的,翻譯成了英文。
《系統程式設計導論》( systematic programming: an introduction,prentice- hall,1973。其德文版已出至第 5版)
《演算法十資料結構=程式》(algorithms+ data structures= programs,prentice-hall,1976)
《演算法和資料結構》(algorithms and data structures, prentice - hall ,1986)
《modula-2程式設計》(programming in m0dula-2,spring6r,1988,第4版)
《pascal使用者手冊和報告: iso pascal標準》 (pascal usermanual and report: iso pascal standard, sprillger, 1991)
《oberon計畫:作業系統和編譯器的設計》( project oberon:the design of an operating system and compiler,acm pr.,1992)
《oberon程式設計:超越pascal和modula》(programming in oberon: steps beyond pascal and modula, acm pr,1992)
《數位電路設計教材》(digital circuit design for computer science students:an introductory textbook, spnnger, 1995)
《編譯器構造的原理和技術》(theory and techniques of compiler construction,addison- wesley,1996)
acm除了2023年授予沃思圖靈獎外,2023年又授予他「電腦科學教育傑出貢獻獎」。另一重要的國際學術組織ieee也授予過沃思兩個獎項: 2023年的 emanual piore獎和 2023年的計算機先驅獎(computer pioneer award)。2023年,加州大學伯利分校命名沃思為「傑出校友」。
沃思是在2023年10月於舊金山舉行的acm年會上接受圖靈獎的。沃思發表了題為「從程式語言設計到計算機建造」(from programming language design to computer construction)的圖靈獎演說,回顧了自己在計算機領域所做的工作。演說全文刊載於communications of acm,2023年 2月,159- 164頁,也可見《前 20年的 acm圖靈獎演說集》(acm turing award lectures——the first 20 years:1966-1985,acm pr.),179-196頁。沃思在演說中強調了程式語言簡 性的重要意義,也討論了它所需的硬體和軟體環境(因為沃思一直很重視語言的實現問題)。他介紹了在設計modula-2和lilith中的經驗,指出第一手經驗和選擇良好開發工具的無比價值。
沃思現仍在蘇黎世工學院任教,他的電子箱為:wirth @ inf.ethz.ch
小程式之父子元件的傳值
定義子元件tabs 在父元件的usingcomponents中註冊 tabs 路徑 父元件.js page tabs tabs 子元件.js 在properties中接收傳來的值 component wx for bindtap handletap data index wx key id view...
C 之父給C程式設計師的建議
1,c 裡幾乎不需要用到巨集,用const火enum定義明顯的常量。用inline避免函式的額外開銷,用template去刻畫一族函式或者型別,用namespace去避免名字衝突。類也可以。2,不要在你需要之前申明它,什麼時候用什麼時候申明 當年從c 轉c的時候吃了老苦了 3,不要用malloc n...
C 之父給 C 程式設計師的建議
在 c 中幾乎不需要用巨集,用 const 或 enum 定義顯式的常量,用 inline 避免函式呼叫的額外開銷,用模板去刻畫一族函式或型別,用 namespace 去避免命名衝突。不要在你需要變數之前去宣告,以保證你能立即對它進行初始化。不要用 malloc,new 運算會做的更好。避免使用 v...