複習一下語法描述的基本概念:
字母表:乙個有窮字符集,記為σ
字母表中的每個元素稱為字元
σ上的字(字串):由σ中的字元構成的乙個有窮序列
不包含任何字元的序列稱為空字,記為ε
σ*表示σ上所有字的全體(σ上所有字元所能產生的字),包含空字ε
例:設σ=,則
σ* =
若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個的優先順序,但都比算術運算子的優先順序低,其結合方式為自左向...