DFA的缺點與改進

2021-04-14 00:31:14 字數 1666 閱讀 8568

一:緣由:

討論乙個問題:在詞法分析中需不需要及怎樣去判斷字元'-'是負號還是減號。

詞法分析的任務是什麼?是將乙個字串分解成乙個個單詞序列。(http://210.33.23.34/course/bianyi/ziyuan%5cjiaocai%5cjiangyi%5cchap03.ppt 「詞法分析的任務:從左至右逐個字元地對源程式進行掃瞄,產生乙個個單詞符號。」)既然是分解成單詞符號,如果你把負號和減號定義為兩種單詞,那麼區分他們就是有必要的;如果將之認為是乙個單詞種類,則不需要區分。

考慮區分的情況,怎麼利用dfa將負號和減號區分開呢?

顯然,如果'-'前面沒有數字,則'-'為負號標誌;如果'-'前面有數字,說明它是乙個雙目運算子,是減號標誌。(這裡不討論不符合語法的輸入),這就需要在狀態轉換的時候向回搜尋。

dfa是無法完成這個向回搜尋工作的,因為dfa狀態轉換只和目前狀態與輸入有關。

三dfa的改進

如果一定要用dfa做帶向前或向後搜尋的分析也是有辦法的。

有幾個方法可以解決

1:設定系統狀態flag,保留搜尋歷史資訊,在狀態轉換時自動判定,修改規則

2:增加狀態轉換時的輸入,將歷史資訊作為轉換控制因子

比如在判定符號'-'的種別時,比照歷史資訊,看是否在'-'前有數字出現。

這就給我們乙個啟示,將dfa的功能擴充套件,在狀態轉換的時候由確定轉換變為條件轉換(這不同於nfa的轉換),當滿足不同條件的時候,轉向不同的路徑。且稱之"sfsa";(switchfinitestateautomaton)

所以thomas說"since it has no stack, it is not well suited for parsing nested structures.",在條件轉換中則不存在這樣的情況,sfsa用指定的棧和方法保留有用的資訊,在狀態轉換路徑的選擇時即可以根據搜尋記錄彈出棧中資料進行向回搜尋,亦可以呼叫方法向前搜尋。

四sfsa的意義:

sfsa並不是取代dfa,dfa是sfsa的乙個子集;sfsa不能讓分析程式理解更加深奧的語言,也並沒有卓越的創新,但是可以做到以下幾點:

一:統一自動機理論與超前搜尋等方法。

在dfa中,不能進行超前或向回搜尋;在sfsa中,超前或向回搜尋只是sfsa的乙個正常功能,超前或向回搜尋時只不過是向系統棧中壓入或彈出元素。

二:使自動機在系統**中應用更加廣泛和規範

在系統**中,通常要求計算機**物件可以自動執行,但是真實世界是乙個連續系統,具有時間上的累積效應。

例如,模擬乙個疾病感染系統,有些疾病再次感染的效果與個體是否曾經受到感染很有關係,這就需要向回搜尋,sfsa可以根據棧歷史情況作出有條件的狀態轉換

再如乙個與天氣狀況有關的公司運營系統,公司的決策受到未來天氣情況的影響,這就需要向前搜尋。

三:使自動機在模式匹配中的功能更加強大:

顯然,使用sfsa不會出現it is not well suited for parsing nested structures這樣的窘境。我們可以想到,sfsa可以輕鬆識別出'-'和'('。

五:總結;

sfsa並不是乙個了不起的創造,它只是在dfa的基礎上改進的功能更強大的自動機。

sfsa的關鍵在於條件轉換,它不同於有限確定轉換(dfa),也不同於不確定轉換(nfa),它的狀態轉換,是有條件的轉換,這個轉換條件,不僅僅可以根據向前搜尋或向後搜尋的結果,甚至可以由使用者或環境感測器實時給出,實現半自動機或互動機。

HDFS的缺點及改進策略

hdfs是乙個不錯的分布式檔案系統,它有很多的優點,但也存在有一些缺點。目前而言,它在以下幾個方面就效率不佳 低延時訪問 hdfs不太適合於那些要求低延時 數十毫秒 訪問的應用程式,因為hdfs是設計用於大吞吐量資料的,這是以一定延時為代價的。hdfs是單master的,所有的對檔案的請求都要經過它...

EventBus的缺點及改進公升級

eventbus很屌,被廣泛用於事件分發 工程解耦,現在已經出到了第3版eventbuds3。網上對它的介紹太多了,我這裡就不詳細展開了。有不熟悉的可以閱讀以下這篇文章 老司機教你 飆 eventbus3 然而本文並不是靠吹噓eventbus來裝逼的,相反,我要數落一下它的缺點,並推介一下event...

HDFS的缺點及改進策略

hdfs是乙個不錯的分布式檔案系統,它有很多的優點,但也存在有一些缺點。目前而言,它在以下幾個方面就效率不佳 低延時訪問 hdfs不太適合於那些要求低延時 數十毫秒 訪問的應用程式,因為hdfs是設計用於大吞吐量資料的,這是以一定延時為代價的。hdfs是單master的,所有的對檔案的請求都要經過它...