編譯原理 詞法分析 之 正規表示式 NFA與DFA

2021-09-25 10:38:00 字數 1061 閱讀 6705

1.正規表示式:正規表示式是一種更緊湊的正則文法,正規表示式、正則文法、nfa、dfa他們存在一一對應關係

2.什麼是dfa:dfa有如下幾個部分構成,初始狀態、終態、輸入字母表(可以理解成合法的輸入)、狀態集、以及狀態轉換表(狀態集與合法輸入笛卡爾積而成,每乙個狀態接收到乙個合法的輸入後都會得到乙個唯一確定的狀態)。

什麼是nfa:基本與dfa相同,不同點是,nfa的狀態轉換規則,乙個狀態接收乙個合法輸入後,轉換成乙個狀態集合而不是唯一乙個狀態

3.nfa與dfa可以等價、可以相互轉化

dfa偽**實現

//狀態集

liststatuslist;

//狀態轉換規則

map> statusconvermap;

//輸入字母表

listinputlist

in = inputlist.get(0)

//初態

status s0;

status s = s0;

//迭代轉換

while(!endinput(in))else

} else

}if s = 終態

else

//根據規則進行狀態轉換,返回轉換後的狀態

public abstract status doconver(status now,input in);

//判斷輸入是否合法

public abstract boolean legelinput(input in);

//判斷狀態是否合法

public abstract boolean legelstatus(status s);

//判斷輸入是否結束

public abstract boolean endinput(input in);

4.nfa到dfa

要點:4.1.根據轉換規則,尋找所有轉換後狀態集的組合

4.2.將這些不同的狀態集每個都當作乙個新的狀態,根據原來的轉換規則,構造新的狀態轉換表(包含這些新加入的狀態),這個狀態轉換表就是符合dfa的狀態轉換表了

nfa -> dfa 過程偽**實現

編譯原理 詞法分析02 正規表示式

r r 正規表示式,表示字串的格式。l r r所匹配的串的集合。symbol符號 l r 中的元素稱為符號。alphabet字母表 表示符號的字元的集合。用 sigma 表示。元字元metacharacter,元符號metasymbol 它們非字母表中的字元,是一些特殊意義的字元,比如,如果要匹配這...

詞法分析與正規表示式 (一)

嚴格來說,詞法分析是語法分析的一部分。可是將詞法分析從語法分析中抽離出來,有如下好處。1.簡化語法分析器的設計。如果把空白字元和去除注釋這些功能都交給語法分析器來處理,那語法分析器的結構會變得非常簡單。2.提高編譯器效率。編譯器耗時最大的部分消耗在詞法分析階段。因為詞法分析涉及到檔案讀操作。而將詞法...

編譯原理 正規表示式轉NFA

從txt檔案中讀入正規表示式 include include include include include define max token 100 using namespace std 詞struct token int readtxt string filename,vector token...