編譯原理 詞法分析總結

2021-08-18 02:45:24 字數 1999 閱讀 3696

課程總結

如何識別單詞符號呢?根據讀來的第乙個字元的種類分別轉到各種子程式處理。這些子程式功能就是識別以相應字元開頭的各種單詞。分析的過程是這樣的:通過判斷下乙個語句字元是否已經讀過來,如果已經讀過來,判斷是字母、數字或者其他的,進入不同的子程式;如果沒有讀進來這個字元,就要讀下乙個字元。

什麼是狀態轉換圖?狀態轉換圖是一張有限方向圖,它的功能是識別或者接受一定的符號串或者說單詞。有三個部分:結點、箭弧、箭弧上的標記。乙個完整的狀態轉換圖是有n個狀態的,其中有乙個狀態,至少有乙個終態。

關於正規表示式和有限自動機。把具有相同特徵的字放在一起組成乙個集合,即所謂的正規集

然後使用一種形式化的方法來表示正規集,即所謂的正規式。正規式是描述單詞結構的一種形式;

正規集是該類單詞的全集。

若m的初態結點同時又是終態節點,則空字可被m識別。dfa m所能識別的字的全體記為l(m)。如果乙個dfa m的輸入字母表為∑,則我們稱m是∑上的乙個dfa。若v是∑上的乙個正規集,當且僅當存在乙個∑上的dfa m,使得v = l(m)。

對任何兩個有限的自動機m1和m2,若有l(m1)=l(m2),則稱m1與m2等價。 對於任何∑上nfa m都可構造乙個∑上的正規式v,使得  l(v) = l(m) 。

使用替換規則逐步消去m』的所有結點。替換規則如下:

還有關於閉包的概念。假定i是m』的狀態集的子集,a ∈ ∑,定義ia =ε_closure(j)。其中,j是所有那些可從i中的某一狀態結點出發經過一條a弧而到達的狀態結點的全體。

關於確定有限自動機的化簡(最少化)。尋找乙個狀態比dfa m少的dfa m』,使得l(m』) = l(m)。兩個狀態等價:設s和t是m兩個不同的狀態,從s出發能讀出某個字而停於終態,那麼同樣,從t出發也能讀出同乙個字而停在終態,反之亦可。dfa化簡演算法:把m的狀態集分割為一些不相交的子集,使得任何不同的兩個子集狀態都是可區別的,而同乙個子集中的任何狀態都是等價的,最後讓每個子集選乙個代表,同時消去其他等價狀態。化簡步驟:(1) 檢查狀態轉換函式是否為全函式。(2) 用化簡演算法進行化簡。(3) 去掉死狀態。

課後習題

做課後習題是劃題做的,把比較重要做了做(在打草紙上... 等我去拍上來)。訂正版:

感想

學完這一章,感覺是挺難以理解的。老師說可以自己寫乙個詞法分析器。坦白地說,我只看了一下原理和**,測試執行而沒有自己實踐,是乙個不足之處;另外在做習題時,因為細節處理,可能會產生連環錯誤,一步錯步步錯,所以從一開始做題就要保持細心;詞法分析是語法分析的基礎,概念性的東西和流程性的東西比較強,其實套路擺在那,明白套路加以練習就可以基本掌握了。

詞法分析器

兩個緩衝區的輸入模式

預處理程式: (作用)

1) 減少記憶體空間占用;

2) 減輕掃瞄器實質性處理的負擔;

預處理程式主要任務: 1) 濾掉源程式中的非單詞成分(如無用空格;換行符等);2) 其他的預處理工作:濾掉注釋;巨集替換;檔案包含的嵌入;條件編譯的嵌入。

編譯原理詞法分析

編譯原理實驗一 詞法分析練習 include include include define tokenmax 100 define progmax 1000 define k esc 27 void analytics 詞法分析 void scanner 輸入掃瞄 bool isletter cha...

詞法分析(編譯原理)

詞法分析 英語 lexical analysis 是電腦科學中將字串行轉換為單詞 token 序列的過程。進行詞法分析的程式或者函式叫作詞法分析器 lexical analyzer,簡稱lexer 也叫掃瞄器 scanner 詞法分析器一般以函式的形式存在,供語法分析器呼叫。完成詞法分析任務的程式稱...

編譯原理詞法分析

1 注意識別符號和無符號整數的重複問題,本人採用map解決。2 cin ch自動忽略空白字元。include include include include using namespace std struct pairs int isboundaries char ch return 3 case...