編譯原理:語法樹,短語,直接短語,句柄


1.已知文法:

S->a|^|(T)

T->T,S|S

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

 解析:根據題意,語法樹如下圖:

  

    全部短語:(T,(^,a))  T,(^,a)  (^,a)  ^,a  ^  a

    直接短語:^  a

    句柄:^

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

{anbn|n>=0}

{ambn|m>=n>=0}

 if語句

{(ab)n|n>=0}

{ambn|m,n>=1}

  if語句

解析:

    (1)G[S]:S -> aSb | ab | ε

 (2)G[S]:S -> aSb | a | ε

 (3)if語句 -> if<條件>then<語句> | if<條件>then<語句>else<語句>

   (4)G[S]:S -> aSb | aaSbb | ... | (ab)| ε

      由S產生任意多個相同數量的a和b

   (5)G[S]:S -> aS|Sb | a | ε

      由S產生任意多個a和任意多個b,a和b的個數都大於1個

3.如果if語句的方法:

stmt->if expr then stmt

     | if expr then stmt else stmt

     | other

其中other代表語言中其他語句。

a)證明該文法是具有二義性的。

b)構造一個等價的無二義性文法,使得else與前面最近的沒有匹配的then匹配。

c)基於該文法構造一個語法制導翻譯模式,將條件語句翻譯改成堆棧機代碼。

 

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

a)二義性證明

根據文法:我們發現 if E1 then if E2 then S1 else S2 有2棵語法樹(2個推導方法)如下所示:

b)等價無二義性文法構造,使else說最近未匹配的then相匹配

 

 

 

 

 


免責聲明!

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



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