編譯原理之理解語法樹、短語、直接短語和句柄


短語
書上的定義如下: 

書上寫的比較抽象,我這里簡單解釋一下,有兩個文法,分別是:

S=*=>aAp (由於部分字符難以輸入,在此用a,b,p代替)
A=+=>b

我們由此可以畫出他的抽象語法樹,如下:

 

那么,abp為此句型的短語 
總結來說:一個句型的語法樹中任一子樹葉結點所組成的符號串都是該句型的短語,由這概念,那么我們自然可以想到,b也應該是該句型的一個短語。

 

直接短語
書中的定義:

 

書中的意思總結來說,指的是如果子樹中不再包含其他的子樹,即A只能推導出b,而b不能再推出其他的式子,則b為此句型的直接短語

 

句柄
先來看一下書中的定義:

 

書中的意思就是:直接短語中的最左直接短語為該句型的句柄。

 

小練習

 

1.已知文法:

S->a|^|(T)

T->T,S|S

分析句型(T,(^,a)),求全部的短語、直接短語和句柄。

S -> (T) -> (T, S) -> (T, (T)) -> (T, (T, S)) -> (T, (S,S)) -> (T, (^, S)) ->(T, (^, a))

此文法的抽象語法樹為:

 

 

由此可得S=(S, (T), b)為此文法的一個句型:

  • 短語: ^; a; ^, a; (^, a); T, (^, a); (T, (^, a));

  • 直接短語:^; a;

  • 句柄:^

  • 此時的最左直接短語是^所以句柄為^

 

2.構造上下文無關文法,描述語言:

(1){anbn|n>=0}

    a, b個數相等,即可得
      S -> aSb l ab | ε

(2){ambn|m>=n>=0}

    a個數大於b,即可得    

      S -> aS l A

      A -> aAb | ε

(3){(ab)n|n>=0}

  A -> ab

  S -> (A)S | ε

 

(4){ambn|m,n>=1}

  S -> aSb|aS|Sb|ab

 

(5)if語句

  if  => if <條件> then <語句A> | if <條件> then <語句B> else <語句B>

 

3.如果if語句的方法:

stmt -> if expr then stmt

     | if expr then stmt else stmt

     | other

句子if E1 then if E2 then S1 else S2是否有兩棵不同的語法樹?說明了什么?

  有兩顆語法樹,分別如圖

 

 

 

 

 說明原語法樹是二義的

 

 


參考鏈接:https://blog.csdn.net/m0_37154839/article/details/80229211


免責聲明!

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



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