詞法分析(二):詞法規則的形式化——正規式與正規集


語法描述的基本概念

復習一下語法描述的基本概念:

字母表:一個有窮字符集,記為Σ
字母表中的每個元素稱為字符
Σ上的字符串):由Σ中的字符構成的一個有窮序列
不包含任何字符的序列稱為空字,記為ε
Σ*表示Σ上所有字的全體(Σ上所有字符所能產生的字),包含空字ε

例:設Σ={ a,b },則
Σ* = { ε,a,b,aa,ab,bb,ba,aaa,…}

若U、V為Σ*的兩個子集,則U和V的連接)定義為
UV = { αβ | α∈U & β∈V },順序不可顛倒

例:設U = { a,aa }、V = { b,bb }
則UV = { ab,abb,aab,aabb }

V自身的n次積記為Vn
V0 = { ε }
V*是V的閉包:V*=V0∪V1∪V2∪V3∪…
V+是V的正規閉包:V+ = VV*

例:設U={ a,aa }
U* = { ε,a,aa,aaa,……}
U+ = { a,aa,aaa,aaaa,……}

可以看出正規閉包是不包含 ε 的閉包


 

正規式與正規集

程序語言都有一定的詞法規則,按照這些詞法規則產生的單詞符號都是一些特殊的字符串,
因此,可以形式化地描述詞法規則,即描述了詞法規則對應的單詞集合

正規式即是詞法規則一種形式化描述,對應的單詞集合稱為正規集

正規式其實就是正則表達式

一個字的集合是正規集當且僅當它能用正規式表示
正規式⇔正規集

上面這張圖就描述了右邊單詞表定義的語言的所有的字
因為正規式可以識別語言的所有字,所以可以用正規式進行詞法分析

正規式與正規集的遞歸定義
對於給定的字母表Σ

  • ε和Φ都是Σ上的正規式,它們所表示的正規集是{ε}和Φ
  • 任何a∈Σ,a是Σ上的正規式,它所表示的正規集是{a}
  • 若U和V都是Σ上的正規式,它們所表示的正規集為L(U)、L(V),則有
    • (U|V)為正規式,表示的正規集為L(U)∪L(V)
    • (U·V)為正規式,表示的正規集為L(U)L(V)
    • (U)* 為正規式,表示的正規集為(L(U))*
      僅由有限次使用上述三個步驟定義的表達式才是Σ上的正規式
      僅由這些正規式表示的字集才是正規集

根據定義
ε是Σ上的一個字,且是正規集{ ε }的正規式,可識別字ε
Φ是一個集合,也是正規式,表示的正規集是Φ
任何a∈Σ,a既是Σ中的字符,又是Σ上的字,還是Σ上的正規式,表示的正規集是{a}

正規式的等價

若兩個正規式表示的正規集相同,則稱這兩個正規式等價

以上證明表示正規式b(ab)*與(ba)*b等價

正規式的性質
交換律:e1|e2 = e2|e1
結合律:e1|(e2|e3) = (e1|e2)|e3 e1(e2e3) = (e1e2)e3 | 及 · 運算均滿足結合律
分配律:e1(e2|e3) = e1e2|e1e3 (e2|e3)e1 = e2e1|e3e1 | 對 · 及 · 對 | 的運算均滿足分配律
eε = εe = e
e1e2<>e2e1


原文轉載自:https://www.cnblogs.com/kafm/p/12721805.html

2022-03-08


免責聲明!

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



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