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

2022-01-22 02:21:49 字數 1442 閱讀 9057

r

r:正規表示式,表示字串的格式。

l(r)

r所匹配的串的集合。

symbol符號

l(r)中的元素稱為符號。

alphabet字母表

表示符號的字元的集合。用 ∑ (sigma)表示。

元字元metacharacter,元符號metasymbol

它們非字母表中的字元,是一些特殊意義的字元,比如,*. 如果要匹配這類符號,則需要使用轉義符號\。

escape character轉義字元

一般使用\表示,用於匹配元字元。

空串empty string

不包含任何字元的串,但它仍然是乙個匹配。用ε(eplsilon)表示

空集empty set

表示正規表示式無任何匹配。

regular definition正則定義

即正規表示式的名字。

正規表示式是以下中的一種:

基本正規表示式由單個字元a(其中a在正規字元的字母表 ∑ 中),以及元字元ε或元字元 φ。 分別表示為:

r|s格式的表示式:其中r和s均是正規表示式。在這種情況下:l(r|s) = l(r)|l(s)。

rs格式的表示式:其中r是正規表示式。在這種情況下:l(rs) = l(r)l(s)。

r格式的表示式:其中r是正規表示式。在這種情況下:l(r) = l(r)*。

(r)格式的表示式:其中r是正規表示式。在這種情況下:l((r)) = l(r),因此,括號並不改變語言,它們只調整運算的優先順序。

注意到這個定義中,|,*,(,),φ,ε均為元字元。

nat = [0-9]+ #自然數

signednat = (+|-)?nat #有符號數

number = signednat("."nat)?(e signednat)? #數字,包含整數,小數,正負數,指數

reserverd = if | while | then | repeat | do ...

letter = [a-z]

digit = [0-9]

identifier = letter(letter|digit)*

)*} #匹配
whitespace = (newline | blank | tab | comment) *

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

1.正規表示式 正規表示式是一種更緊湊的正則文法,正規表示式 正則文法 nfa dfa他們存在一一對應關係 2.什麼是dfa dfa有如下幾個部分構成,初始狀態 終態 輸入字母表 可以理解成合法的輸入 狀態集 以及狀態轉換表 狀態集與合法輸入笛卡爾積而成,每乙個狀態接收到乙個合法的輸入後都會得到乙個...

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

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

正規表示式 02

捕獲組也就是pattern中以括號對 分割出的子pattern。至於為什麼要用捕獲組呢,主要是為了能找出在一次匹配中你更關心的部分。group 0 於group 等價,表示整個正規表示式的匹配字串,group 1 等價於第乙個括號內的表示式返回的字串,以此類推。捕獲組可以通過從左到右計算其開括號來編...