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

2022-10-08 16:48:25 字數 1631 閱讀 5829

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

字母表:乙個有窮字符集,記為σ

字母表中的每個元素稱為字元

σ上的字串):由σ中的字元構成的乙個有窮序列

不包含任何字元的序列稱為空字,記為ε

σ*表示σ上所有字的全體(σ上所有字元所能產生的字),包含空字ε

例:設σ=,則

σ* =

若u、v為σ*的兩個子集,則u和v的連線)定義為

uv = ,順序不可顛倒

例:設u = 、v =

則uv =

v自身的n次積記為vn

v0 =

v*是v的閉包:v*=v0∪v1∪v2∪v3∪…

v+是v的正規閉包:v+ = vv*

例:設u=

u* =

u+ =

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

程式語言都有一定的詞法規則,按照這些詞法規則產生的單詞符號都是一些特殊的字串,

因此,可以形式化地描述詞法規則,即描述了詞法規則對應的單詞集合

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

(正規式其實就是正規表示式 )

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

正規式⇔正規集

上面這張圖就描述了右邊單詞表定義的語言的所有的字

因為正規式可以識別語言的所有字,所以可以用正規式進行詞法分析

正規式與正規集的遞迴定義

對於給定的字母表σ

根據定義

ε是σ上的乙個字,且是正規集的正規式,可識別字ε

∅是乙個集合,也是正規式,表示是的正規集是

任何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

2022/3/8

C語言的詞法規則

提綱 本文主要介紹了c語言中的詞法規則,包括字元 注釋 接續符 識別符號 一 字元 1 注釋方式 c語言中有兩種注釋方式 1 2 2 注釋原則 1 編譯器剔除掉注釋之後,會用空格來替換原有的注釋位置。2 編譯器把 當作一段注釋的開始,將 後面的內容都當作注釋內容,直到出現 為止,表示注釋結束。3 總...

C和指標 2 2詞法規則

一.字元 1.三字母詞 三元符 trigrph include using namespace std int main 另外 的實際意義是 cout run are u ready 這就是為什麼上面這段 輸出為 預防三字母詞,加轉義符 cout run are u ready 於是就有了正確的結果...

C語言程式集與詞法規則

運算子和表示式 一 一 關係運算子和關係表示式 1.關係運算子 比較兩個資料給定關係的運算子稱為關係運算子。c語言中提供了6個關係運算子 大於 小於 大於等於 小於等於 等於 不等於 關係運算子是雙目運算子,其中前4個的優先順序高於後面2個的優先順序,但都比算術運算子的優先順序低,其結合方式為自左向...