文法和語言的形式描述 詞法分析 - 編譯原理

先解釋幾個單詞便於記憶。在 G(V_N, V_T, P, S) 中
非終結符 nonterminal symbol
終結符 terminal symbol
產生式 production

接下來我以正則表達式爲實例來解釋編譯原理的一些東西,因爲編譯原理太過抽象,初學者沒有實例可以類比,難於理解。我只解釋難理解的一部分,還需要對照書本來看。
非終結符是可推導的:比如正則表達式中 *,+ 這些,可以代表一類元素。終結符是類似於 a,b,c,1,2 之類的,只能能代表他自己。
上下文有關文法,比如 {0,9}+,越推導越多的式子。
“歸約”就是把字符串 “12345” 再抽象回式子 {0,9}+。
詞法規則可以用3型文法來描述,它產生的集合是正規集。

對於字母表∑      L(ε)={ε}   L 應該是language,也可理解爲 lanch 展開。式子表示的意思是:正規式產生的正規集 {ε}。
b(ab)^*=(ba)^*b,(a|b)^*=(a^*b^*)*。考慮一下 a、b 位置順序固定嗎?不固定。

確定的有限自動機:(S,∑,f,s_0,Z)
NFAM→DFAN:簡單理解就是把不確定的過程看成一坨,新的坨之間就都是確定的。

爲什麼正規式對應於NFAM ?   舉個例子   *→1|3|d|,    ,這種式子顯然是不確定的。

直接短語好理解,那麼非直接短語有例子嗎?       嵌套的for語句。
最左直接短語就是最精簡的那種抽象: “12345abd” → {0,9}+ {a-z}+→*     這麼舉例可能不太恰當,大概就是這個意思。

消除文法的左遞歸:
A→Aα | β   改造爲:
A→βA'
A'→αA' | ε
因爲把 A 這個式子推到不能再推,序列裏全是終結符時,最左一定是 β ,所以就可以提取出來。

LL(1)文法可以看作無歧義文法,沒有左遞歸也沒有公共因子。那麼爲什麼有FOLLOW(A)的限制?推導式要避免重複。

計算FOLLOW(A)時就把所有的式子推導到只有A,然後觀察即可,這樣看簡單點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章