介紹文法之前,先介紹形式形式語言的一些基礎知識。
形式語言基礎知識
- 字母表:符號的非空有限集合稱為字母表
- 符號串:由字母表中的符號組成的有限符號序列稱為該字母表的符號串
- 符號長度:|a|,即a中出現的符號個數
- 首碼:符號串a末尾刪除零個或多個符號後得到的符號串
- 尾碼:符號串a開頭刪除零個或多個符號後得到的符號串
- 子串:符號串a刪除首碼和尾碼之後的符號串
- 子序列:符號串a刪除0或多個符號(可以不連續)得到的符號串。
- 語言:某個確定的字母表上符號串的任何集合。
- 終結符:不可再分的元素,一般用小寫字母代替
- 非終結符:可以再次拆分的元素,一般用大寫字母代替
非形式化語言運算
- 語言L和M的合并,LUM={s|s∈L或 s∈M}
- 語言L和M的串連,LM={st|s∈L,t∈M}
- 語言L的Kleene閉包,L*=
- 語言L的正閉包,L+=
第3條表示0個到無窮多個L元素的集合,第4條表示1個到無窮多個L元素的集合,例如
L1 ={a,b,…y,z} M1 ={1,2…8,9 } (L1UM1)={a,b,… y,z,1,2…8,9 }
(L1UM1)*={a,b,… y,z,1,2…8,9 ,aa,1a,…xyz,6789st..}
L1(L1UM1)*={所有字母打頭的字母和數字記號串}
好了,文法的前續工作已經準備完畢,然後咱們再說說文法的用途,文法是一種形式化語言,知其作用:文法是通過產生方式描述語言的:語言中的每個句子可以用嚴格定義的規則來構造。
我的理解是,每種語言都有自己的規則,比如說漢語,最常見的規則是:主語+謂語+賓語,每種程式設計語言也都有其自己的文法規則,文法就是對原始碼中的單詞串進行約束的一種規則。
文法
文法是一個四元組:G={VT,VN,S,P}
VT:非空有限符號集合,它的每個元素為終結符號,如abc
VN:非空有限符號集合,它的每個元素為非終結符號,如ABED
S:屬於非終結符集合,是文法G的開始符號
P:是一個非空有限集合,它的元素為稱為產生式
文法約束
VN和VT不含公用的元素,即VN ∩ VT = φ(大寫和小寫不會有交集)
用V表示VN ∪ VT ,稱為文法G的字母表。
規則,也稱產生式或產生式,是形如α→β,α稱為規則的左部,β稱作規則的右部,開始符S必須出現在某一個產生式的左部一次。
下篇部落格詳細介紹四種文法類型:編譯原理之文法二