聲明:本系列文章,是根據中國大學MOOC網 哈工大的編譯原理 這門課學習而成的學習筆記。
一、基本概念
字母表
字母表Σ 是一個有窮符號集合。字母表也稱爲符號集。
- 符號:字母、數字、標點符號…
- 例:ASCII 字符集,二進制字母表:{0,1},Unicode字符集
字母表上的運算
- 字母表與字母表的乘積
- 字母表的 n次冪:長度爲 n 的符號串構成的集合
- 字母表的正閉包:長度正數的符號串構成的集合
- 字母表的克林閉包:任意符號串(長度可以爲零)構成的集合
符號串
- 串:由字母表中的符號組成的任何有窮序列。
- 串 s 的長度,通常記作 |s| ,指 s 中符號的個數。 例:|aab|=3。
- 空串是長度爲0 的串,用 ε 表示,| ε |=0。
串上的運算
-
串的連接:如果 x 和 y 是串,那麼 x 和 y 的連接,是把 y 附加到 x 後面而形成的串,記作 xy。
例如,如果 x=dog 且 y=house,那麼 xy=doghouse。 空串是連接運算的單位元,即,對於任何串 s 都有, εs=sε=s。
-
串的冪運算:將 n 個 串連接起來。
二、文法的定義
文法的形式化定義
產生式的簡寫
符號約定
- 終結符
·字母表中排在前面的小寫字母,如a、b、c
·運算符,如+、乘等
·標點符號,如括號、逗號等
·數字0、1、. . . 、9
·粗體字符串,如id、if等
- 非終結符
·字母表中排在前面的大寫字母,如A、B、C
·字母S。通常表示開始符號
·小寫、斜體的名字,如expr、stmt等
·代表程序構造的大寫字母。如E(表達式)、T(項) 和F(因子)
三、語言的定義
推導和歸約
句型和句子
語言的形式化定義
由文法 G 的開始符號 S 推導出的所有句子構成的集合稱爲文法 G 生成的語言,記作 L(G)。
語言上的運算
四、文法的分類
0型文法,無限制文法
1型文法,上下文有關文法
2型文法,上下文無關文法
3型文法,正規文法
四種文法之間的關係
五、CFG的分析樹
分析樹是推導的圖形化表示
句型的短語
給定一個句型,其分析樹中的每一顆子樹的邊緣稱爲該句型的一個短語。
如果子樹只有父子兩代節點,那麼這課子樹的邊緣稱爲該句型的一個直接短語。
二義性文法
如果一個文法可以爲某個句子生成多棵分析樹, 則稱這個文法是二義性的
二義性文法的判定
對於任意一個上下文無關文法,不存在一個算法, 判定它是無二義性的;
但能給出一組充分條件, 滿足這組充分條件的文法是無二義性的
滿足,肯定無二義性
不滿足,也未必就是有二義性的