簡單粗暴搞定編譯原理中四種文法語言的基本概念

2021-09-08 07:16:19 字數 830 閱讀 1581

今天覆習發現書上對四種文法語言的描述太過抽象,故此整理,以助記憶。

設 g =(vn,vt,p,s),如果它的每個產生式 α→β 是這樣一種結構:α∈(vn∪vt)* 且至少含有乙個非終結符,而 β∈(vn∪vt)*,則 g 是乙個0型文法。

產生式左邊:至少含有乙個非終結符的符號串

產生式右邊:任意符號串

在 0 型文法的基礎上每乙個 α→β,都有 |β| >= |α|,僅僅 s→ɛ 除外。這裡的 |α| 表示的是 α 的長度,|β| 同理。

產生式左邊:至少含有乙個非終結符的符號串

產生式右邊:任意符號串

加限制產生式長度左 <= 右和 s 不能推出 ɛ。

有助於理解上下文有關的等價定義:α1aα2→α1βα2 ,其中 α1、α2、β∈(vn∪vt)* ,β≠ɛ ,a∈vn

只有 a 出現在 α1 和 α2 的上下文中,才允許用 β 取代 a

在1型文法的基礎上,再滿足:每乙個產生式都為 a→β。

產生式左邊:非終結符

產生式右邊:任意符號串

在 2 型文法的基礎上滿足:a→α|αb(右線性)或 a→α|bα(左線性)。

產生式左邊:非終結符

產生式右邊:終結符可任意多,非終結符最多乙個且位置要麼最左邊要麼最右邊

4 中文法型別定義是在前一種定義上逐漸增加限制的,所以 3→ 2→ 1→ 0,即是 3 型文法則一定是 2 型文法,依此類推,反之不成立。

從原理上搞定編碼 Base64編碼

一.base64編碼由來 為什麼會有base64編碼呢?因為有些網路傳送渠道並不支援所有的位元組,例如傳統的郵件只支援可見字元的傳送,像ascii碼的控制字元就 不能通過郵件傳送。這樣用途就受到了很大的限制,比如二進位製流的每個位元組不可能全部是可見字元,所以就傳送不了。最好的方法就是在不改變傳統協...

從原理上搞定編碼 Base64編碼

oracle中的rowid是一種資料型別,它使用base64編碼的18個字元來唯一標識一條記錄的物理位置的id,有點類似於主鍵,不過與主鍵的本質區別是rowid一般情況下是按照遞增的順序排列的。以下內容為 內容 一.base64編碼由來 為什麼會有base64編碼呢?因為有些網路傳送渠道並不支援所有...

從原理上搞定編碼(四) Base64編碼

一.base64編碼由來 為什麼會有base64編碼呢?因為有些網路傳送渠道並不支援所有的位元組,例如傳統的郵件只支援可見字元的傳送,像ascii碼的控制字元就不能通過郵件傳送。這樣用途就受到了很大的限制,比如二進位製流的每個位元組不可能全部是可見字元,所以就傳送不了。最好的方法就是在不改變傳統協議...