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

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

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

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

設(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。由于輸入為空,成功分析!

 

自頂向下的分析思想:

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

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

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

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

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

該推導(dǎo)過程利用了最左推導(dǎo)。

 

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