編譯原理基礎----詞法分析
一、概述
詞法分析是編譯的第一個階段。詞法分析器的作用是讀入源程式的輸入字元,將他們組成詞素,生成並輸出一個詞法單元序列,這個詞法單元序列被輸入到語法分析器進行語法分析。另外,由於語法分析器在編譯器中負責讀取源程式,因此,除了識別詞素,它還會完成一些其他任務,比如,過濾掉源程式中的一些註釋和空白,將編譯器生成錯誤訊息與源程式的位置關聯起來等。
二、正則表示式
,ε
正規式也成為正則表達,也是表示正規集的工具。也是我們用於描述單詞符號的方便工具,下面是正規式和他所表示的正規集的遞迴定義。設字母表為£,輔助字母表為£'={Φ,ε,.,*,(,)}.
(1)ε和Φ都是£上的正規式,他們所表示的正規集分別為{ε}和Φ;
(2)任何a€£上的一個正規式,它表示的正規集為{a};
(3)假定e1和e2是£上的一個正規式,它表示的正規集分別為L(e1)和L(e2),那麼(e1),e1|e2,e1.e2和e*也都稱為正規式,它所表示的正規集分別為L(e1),L(e1)υL(e2),L(e1)L(e2)和(L(e1))*
(4)僅有有限次使用上述三步驟而定義的表示式才是£上的正規式,僅有這些正規式所表示的字集才是£上的正規式。
其中的“|”讀為“或”(也有使用“+”代替“|”的),讀為“連線”,“*”讀為閉包(即任意有限次的自重複連線)。在不至混淆,括號可省去,但規定算符的優先順序為“*”,再最後“|”。連線符"."一般可省略不寫。“*”、“.”和“|”都是左結合的。
三、有窮自動機
一個確定的有窮自動機M是一個五元組:M=(K,£,f,S,Z),其中
1.K是一個又窮集,它的每一個元素稱為一個狀態;
2.£是一個有窮字母表,它的每一個元素稱為一個輸入符號,所以也稱£為輸入符號表;
3.f是轉換函式,是KX£->K上的印像,即,如f(ki,a)=kj(ki€K,kj€K)就意味著,當前狀態為ki,輸入字元為a時,將轉換到下一狀態空間,我們把kj作為稱作一個後繼狀態;
4.S€K是唯一一個初態
5.Z包含於K,是一個終態集,終態也可成為接受狀態或結束狀態。
不確定的有窮自動機
確定的有窮自動機和不確定的有窮自動機的區別(參考連結):https://zhidao.baidu.com/question/129432957.html