編譯原理-詞法分析02-正則表達式


0.術語

r

r:正則表達式,表示字符串的格式。

L(r)

r所匹配的串的集合。

symbol符號

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

alphabet字母表

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

元字符metacharacter,元符號metasymbol

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

escape character轉義字符

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

空串empty string

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

空集empty set

表示正則表達式無任何匹配。

regular definition正則定義

即正則表達式的名字。

1.正則表達式的定義

正則表達式是以下中的一種:

  1. 基本正則表達式由單個字符a(其中a在正規字符的字母表 ∑ 中),以及元字符ε或元字符 Φ。 分別表示為:
  • L(a) = {a};
  • L(ε) = {ε};
  • L(Φ) = {}.
  1. r|s格式的表達式:其中r和s均是正則表達式。在這種情況下:L(r|s) = L(r)|L(s)。
  2. rs格式的表達式:其中r是正則表達式。在這種情況下:L(rs) = L(r)L(s)。
  3. r格式的表達式:其中r是正則表達式。在這種情況下:L(r) = L(r)*。
  4. (r)格式的表達式:其中r是正則表達式。在這種情況下:L((r)) = L(r),因此,括號並不改變語言,它們只調整運算的優先級。

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

2.擴展

  • r+ 正閉包,至少匹配一個

  • . 匹配任意一個字符

  • 區間匹配 如[a-z],[0-9],[A-Za-z]

  • ~a或^a 排除匹配

  • r? 可選匹配

3.程序語言記號的正則表達式

  • number
nat = [0-9]+ #自然數
signedNat = (+|-)?nat #有符號數
number = signedNat("."nat)?(E signedNat)? #數字,包含整數,小數,正負數,指數
  • reserved & identifier
reserverd = if | while | then | repeat | do ...
letter = [a-z]
digit = [0-9]

identifier = letter(letter|digit)*

  • comment
{(~})*} #匹配{ this is a Pascal comment}

  • whitespace

    解決匹配的二義性遵循最長子串原理principle of longest。

whitespace = (newline | blank | tab | comment) *


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM