編譯原理 語法樹 句柄 簡單短語 短語


轉自http://blog.sina.com.cn/s/blog_733bf6e00100v1b2.html

關於編譯原理 語法樹 句柄 簡單短語 短語 的區分,通過兩個例子來理解概念以及方法:

例子1——語法樹

S -> a|b|(T) 

T -> TdS|S 

Vt={a,b,d,(,)}.Vn={S,T},S是開始符 
句型(Sd(T)db)是S的一個推導,其中___是句柄;____是最左素短語;____是該句型的直接短語,_____是短語。 

  

素短語的概念:它是一個遞歸的定義,至少含有一個終結符,並且除它自身之外不再含任何更小的素短語,所謂最左素短語就是處於句型最左邊的素短語的短語。而一個算符優先文法G的任何句型的最左素短語是滿足以下條件的最左子串NaNb…NcNdN(N是非終結符,a,b,c,d是終結符)

實例:句型T+T*F+id,求出其語法樹,可知,T*F是最左素短語,id也是素短語,但不是最左的。 

解析:

 

題目中的句型可用下面的語法樹表示: 
            S 
         /  |  \ 
      (     T     ) 
        /   |   \ 
      T     d     S 
     /|\          | 
    T  d  S       b 
    |    /|\ 
    S  (  T  ) 

 

 

一個句型的語法樹中任一子樹葉結點所組成的符號串都是該句型的短語,當子樹中不包含其他更小的子樹時,該子數葉結點所組成的字符串就是該句型的直接(簡單)短語。 
因此本題的直接短語的為 S 、(T)、b,短語有S、(T)、b、Sd(T)、Sd(T)db 、(Sd(T)db)。

d不是直接短語,因為d所在的樹還有子樹所以它不是 !

一個句型的最左直接短語匯稱為該句型的句柄

素語是一個短語,它至少含有一個終結符,而且除它自身以外不再含有更少的素短語,對於句型(Sd(T)db)的素短語是(T)、b.

 

每個句型對應一棵語法樹 
每棵語法樹的葉子結點從左到右排列構成一個句型 
每棵語法樹的子樹的葉子結點從左到右排列構成一個短語 
每棵語法樹的簡單子樹(只有父子兩層結點)的葉子結點從左到右排列構成一個簡單(直接)短語 
每棵語法樹的最左簡單子樹(只有父子兩層結點)的葉子結點從左到右排列構成句柄 
素短語是至少包含一個終結符的短語,但它不能包含其它素短語 
最左推導:在每個推導過程中,總是首先考慮對當前最左邊的非終結符號進行推導 
最右推導:在每個推導過程中,總是首先考慮對當前最右邊的非終結符號進行推導

 

例子2——直接推導

已知文法G[S] S::=aB|bA
             A::=a|aS|bAA
             B::=aBB|bS|b
句型aabbAb的句柄是
A.a     B.ab
C.b     D.bA

解析:
句型aabbAb的句柄是D: bA; 
S->aB->aaBB->aabSB->aabbAB->aabbAb 
按照最左推導,其中的S->bA這步是最后的直接推導(即它推出的bA不再被繼續往下推導),雖然B->b也是這樣的,但不是最左的。 
總結
畫語法樹
    一個節點的所有子葉子節點從左到右相連即是該句型的短語

  當子樹中不包含其他更小的子樹時,該子數葉結點所組成的字符串就是該句型的直接(簡單)短語——重點看該子葉子節點的兄弟節點。最左簡單短語為句柄

 
直接推導
 按最左推導,最后的直接推導出的結果是簡單短語,最左簡單短語為句柄 
        
句柄 簡單短語 短語 素短語 都是取自句型的一部分


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM