1. 程式人生 > >編譯原理:短語、直接短語、控制代碼、素短語

編譯原理:短語、直接短語、控制代碼、素短語

概念

如果S->* αAβ and A->+γ,則稱γ是句型αγβ的相對於變數A的短語 
如果S->* αAβ and A->γ,則稱γ是句型αγβ的相對於變數A的直接(簡單)短語 最左直接短語叫做控制代碼

其實最簡單的判斷方法直接畫出語法樹了。

文法

S->(L)|aS|a 
L->L,S|S 
分析(S,(a))

1.先畫出語法樹

這裡寫圖片描述

2.判斷短語

一個句型的語法樹中任一子樹葉節點所組成的符號串都是該句型的短語。

  1. 很明顯的,最下面的a是S的葉子節點、最左邊的S是L的葉子節點。
  2. 其他的葉子節點從左往右分別是(,,,(,),)
  3. 在樹的第四層的(,L,)都是子樹S的孩子,因為短語都是葉子節點,所以這邊的短語有(a)
  4. 在樹的第三層的L,,,S都是子樹L的孩子,因為短語都是葉子節點,所以這邊的短語有S,(a)
  5. 在樹的第二層的(,L,)都是根節點S的孩子,因為短語都是葉子節點,所以這邊的短語有(S,(a))

    所以短語有a (a) S,(a) (S,(a)) S

3.判斷直接(簡單)短語

當子樹不包含其他更小的子樹時,該子樹葉節點所組成的字串就是該句型的直接短語

短語包含直接短語,我們可以直接在短語中判斷。 
這裡只有第五層的S和第三層的L不包含其他更下的子樹,所以有a和S是直接短語。 
其中(a)的父節點S包含L,S,(a)的父節點L包含L和S, (S,(a))的父節點S包含L

4.判斷控制代碼

控制代碼是最左邊的直接短語

因為S處於最左邊,所以S是直接短語。

5.判斷素短語

素短語是一個短語,它至少含有一個終結符,而且除他之外不含有其他素短語。

短語包含素短語,我們可以直接在短語中判斷。 
因為S可以推匯出其他字元,(a);S,(a);(S,(a))都包含其他素短語,所以符合條件的只有a。