用例子來區分4種文法

2021-06-18 18:45:40 字數 1301 閱讀 6195

編譯原理中文法這部分內容很重要,軟考中也涉及到了,剛開始這部分內容挺亂的,我連定義都看不懂就別說區分它們了,這是經過做題,從題中分析,再聯絡定義,再與同學們一起討論終於把它們分清楚了,它們的關係用下面的圖表示一下

文法g定義為四元組(vn ,vt ,p,s)

提示:下面例子中的大寫字母表示的是非終結符,而小寫字母表示的是終結符。

設g=(vn,vt,p,s),如果它的每個產生式α→β是這樣一種結構:α∈(vn∪vt)*且至少含有乙個非終結符,而β∈(vn∪vt)*,則g是乙個0型文法。0型文法是這幾類文法中,限制最少的乙個,所以我們在試題中見到的,至少是0型文法。

0型文法相當於圖靈機。

它是在0型文法的基礎上每乙個α→β,都有|

β|>=|

α|。這裡的|β|表示的是β的長度。

1型文法相當於線性有界自動機。

例子:如有a->ba則|β|=2,|α|=1符合1型文法要求。反之,如aa->a,則不符合1型文法。

特例

:α→ε也滿足1型文法。

2型文法是在1型文法的基礎上,再滿足:每乙個α→β都有α是乙個非終結符。如a->ba,符合2型文法要求。

2型文法相當於下推自動機。

例子:ab->bab雖然符合1型文法要求,但不符合2型文法要求,因為其α=ab,而ab不是乙個非終結符。a->bab就對啦

它是在2型文法的基礎上滿足:a→α

|αb(右線性)或a→

α|bα(左線性)。

3型文法相當於有限狀態自動機。

注意:3型文法中只能滿足右線性,或只能滿足左線性,不能兩種同時都有

例子:a->a,a->ab,b->a,b->cb,則符合3型文法的要求。但如果推導為:a->ab,a->ab,b->a,b->cb或推導      

為:a->a,a->ba,b->a,b->cb則不符合3型方法的要求了。

相信大家通過我舉得例子一定能理解這部分,能非常清楚的它們之間的區別

用例子來解釋先驗,後驗

參考 例子隔壁老王要去10公里外的乙個地方辦事,他可以選擇 走路騎自行車開車 並花費了一定時間到達目的地。在這個事件中,可以把交通方式 走路 騎車或開車 認為是原因,花費的時間認為是結果。後驗概率 若,老王花了乙個小時的時間完成了10公里的距離 那麼很大可能是騎車過去的,當然也有較小可能老王是個健身...

用小例子來解釋svn switch的使用

svn switch 的作用,不大好講清楚。用語言描述起來是 switch命令只是update命令的乙個超集。svn switch和svn update兩個命令唯一區別就是update會一直比較同一路徑。換名話說,update通過時間移動你的工作拷貝,switch通過時間和空間移動工作拷貝。本文的例...

override與new 用兩個小例子來解釋

例一 class program public class a5 public virtual void methodb public class b5 a5 例二 class a public virtual void aa class b a public override void aa 將這...