一、概述
詞法分析是編譯的第乙個階段。詞法分析器的作用是讀入源程式的輸入字元,將他們組成詞素,生成並輸出乙個詞法單元序列,這個詞法單元序列被輸入到語法分析器進行語法分析。另外,由於語法分析器在編譯器中負責讀取源程式,因此,除了識別詞素,它還會完成一些其他任務,比如,過濾掉源程式中的一些注釋和空白,將編譯器生成錯誤訊息與源程式的位置關聯起來等。
二、正規表示式
正規式也成為正則表達,也是表示正規集的工具。也是我們用於描述單詞符號的方便工具,下面是正規式和他所表示的正規集的遞迴定義。設字母表為£,輔助字母表為£'=.
(1)ε和φ都是£上的正規式,他們所表示的正規集分別為和φ;
(2)任何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,是乙個終態集,終態也可成為接受狀態或結束狀態。
不確定的有窮自動機
乙個不確定的有窮自動機m是乙個五元組:m=(k,£,f,s,z),其中
1.k是乙個有窮集,它的每乙個元素稱為乙個狀態;
2.£是乙個有窮字母表,它的每乙個元素稱為乙個輸入符號;
3.f是乙個k*£*到k的子集印像,;即:k*£*--->2k,其中2k表示k的冪集
4.s€k是非空初態集
5.z包含於k,是乙個終態集。
四、nfa轉化為等價的dfa
編譯原理詞法分析
編譯原理實驗一 詞法分析練習 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...