二義性文法


二義文法的定義

給定文法G,如果存在句子s,它有兩棵不同的分析樹,那么稱G是二義性文法

帶來的問題

從編譯器角度,二義性文法存在問題:同一個程序會有不同的含義,因此程序運行的結果不是唯一的

一個句子有多於一棵分析樹,僅與文法和句子有關,與采用的推導方式無關。

二義性文法舉例

造成文法二義性的根本原因:

文法中缺少對文法符號優先級和結合性的規定。

改寫二義文法的關鍵步驟

  • 引入一個新的非終結符,增加一個子結構並提高一級優先級
  • 遞歸非終結符在終結符左邊,使該終結符具有左結合性,否則有右結合性,
  • 例如

特點

1.新引入的非終結符,限制了每一步直接推導均有唯選擇
2.最終分析樹的形狀,僅與文法有關,而與推導方法無關
3.非終結符的引入,增加了推導步驟(分析樹增高)
4.越接近S的文法符號優先級越低
5.對於A->aAβ,其右部中,若A在終結符a左邊出現(即β中包含a),則終結符a具有左結合性質

懸空else問題

  • 消除二義性,引入新的非終結符matched_stmt, unmatched_stmt


免責聲明!

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



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