編譯原理——關於文法、推導、規約、句柄、語法樹、二義性的理解


短語:直觀理解,該句型中的一個符號串,這個符號串能被前面句型中的某個非終結符推出,那么這個符號串是該句型的短語。注意必須保證非終結符是前面句型的,說明要確定一個句型的短語,要找到句型對應的推導,規約或語法樹才可以,對應的是這個句型生成的動態過程。

簡單短語:略

句柄:一個句型只能有一個句柄。(前提默認非二義性文法)

推導和規約過程理解

推導過程

對每一個句型,該句型一定有一個推導過程(可能不唯一),推導過程一定對應一顆語法樹(推導過程可能不唯一,當然語法樹也可能不唯一)

推導不唯一,規約不唯一,規范推導

規范推導:最右推導,每次拆最右邊的非終結符

規約過程

規約直觀理解就是,“剪子樹(但留子樹的根)【對應到表達式就是用短語替代那個非終結符】,每剪一次對應一次規約,直到剪到只剩樹根”

規范規約:最左規約,每次對最左簡單短語進行的規約

一個文法的句型,必能通過一次一次的規范推導獲得。同時也能通過一次一次的規范規約規約至開始符號,每次規約都對應一個句柄。所以用規約簡單短語的方法檢查文法是可行的。

規范推導和規范規約互為逆過程:規范推導倒着看就是規范規約

規范句型:由規范推導或規范規約得到的句型

二義性文法——不可判定的

  • 文法所定義的某個句子存在兩棵不同的語法樹。

  • 文法中存在某個句子,它有兩個不同的規范(最右)推導。

  • 文法中存在某個句子,它有兩個不同的規范(最左)規約,即在規約中某些規范句型的句柄不唯一。

注意:

  1. 如果存在兩種推導,那么不能說明一定是二義性文法,因為兩種推導可能對應同一個語法樹

  1. 二義性的例子

句型E+E*i存在不同句柄

題型:給一句型,找短語、簡單短語、句柄

  1. 畫語法樹

  2. 對於某個句型的語法樹,它的每一顆子樹都能找出一個短語(可能重復),枚舉所有的子樹就能找全。

  3. 在此基礎上,再找簡單短語和句柄
    參考https://www.cnblogs.com/AlvinZH/p/8300162.html


免責聲明!

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



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