1.正規表示式:正規表示式是一種更緊湊的正則文法,正規表示式、正則文法、nfa、dfa他們存在一一對應關係
2.什麼是dfa:dfa有如下幾個部分構成,初始狀態、終態、輸入字母表(可以理解成合法的輸入)、狀態集、以及狀態轉換表(狀態集與合法輸入笛卡爾積而成,每乙個狀態接收到乙個合法的輸入後都會得到乙個唯一確定的狀態)。
什麼是nfa:基本與dfa相同,不同點是,nfa的狀態轉換規則,乙個狀態接收乙個合法輸入後,轉換成乙個狀態集合而不是唯一乙個狀態
3.nfa與dfa可以等價、可以相互轉化
dfa偽**實現
4.nfa到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.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...