剛學完這兩種分析方法,說兩個故事總結(jié)一下:

某日小明上數(shù)學課,他的老師給了很多個不同的直角三角板讓小明用尺子去量三角板的三個邊,并將長度記錄下來。兩個小時過去,小明完成任務(wù),把數(shù)據(jù)拿給老師。老師給他說,還有一個任務(wù)就是觀察三條邊之間的數(shù)量關(guān)系。又是兩個小時,聰明的小明連蹦帶跳走進了辦公室,說:“老師,我找到了,三條邊之中有兩條,它們的平方和約等于另外一條的平方。”老師拍拍小明的頭,“你今天學會了一個定理,勾股定理。它就是說直角三角形有兩邊平方和等于第三邊的平方和”。

另一個故事,某日老師告訴小明“今天要教你一個定理,勾股定理。”小明說,“什么是勾股定理呢?”“勾股定理是說,直角三角形中有兩條邊的平方和等于第三邊的平方。”然老師給了一大堆直角三角板給小明,讓他去驗證。兩個小時后,小明告訴老師定理是正確的(其實小明只用了一個小時,另外的一個小時是……,既然小明完成任務(wù)了,大家也就別問了^_^)。

兩個故事剛好是語法分析里面對應(yīng)的兩個方法:第一個故事說的是自底向上的分析方法,第二個故事說的是自頂而下的分析方法。回到課程的內(nèi)容,用兩個例子說明這個問題:

設(shè)某語言的文法是:

1E E+n             2E n

分析輸入串:n+n+n

自底向上的分析思想:

從左到右看待分析串:

先是n,由(2)抽象為E;繼續(xù)讀+n,得到E+n,由(1)抽象為E;繼續(xù)+n,有E+n,將串E+n抽象為E。由于輸入為空,成功分析!

 

自頂向下的分析思想:

從左往右觀察串,分析(推導)過程為:

E => E+n                                   ( using (1) )

 => E+n+n                          ( using (1) )

 => n+n+n                         ( using (2) )

推導結(jié)束,分析成功!

該推導過程利用了最左推導。

 

兩種分析方法的根本區(qū)別是:自底向上的分析,從具體到抽象;自頂向下的分析,從抽象到具體。兩種分析思路恰恰又是哲學思考問題的兩大方向。計算機科學與哲學恰好在此結(jié)合起來。計算機科學思考問題有很多時候是與哲學相類似,上述就是一個例證。