短語:直觀理解,該句型中的一個符號串,這個符號串能被前面句型中的某個非終結符推出,那么這個符號串是該句型的短語。注意必須保證非終結符是前面句型的,說明要確定一個句型的短語,要找到句型對應的推導,規約或語法樹才可以,對應的是這個句型生成的動態過程。
簡單短語:略
句柄:一個句型只能有一個句柄。(前提默認非二義性文法)
推導和規約過程理解
推導過程:
對每一個句型,該句型一定有一個推導過程(可能不唯一),推導過程一定對應一顆語法樹(推導過程可能不唯一,當然語法樹也可能不唯一)
推導不唯一,規約不唯一,規范推導
規范推導:最右推導,每次拆最右邊的非終結符
規約過程:
規約直觀理解就是,“剪子樹(但留子樹的根)【對應到表達式就是用短語替代那個非終結符】,每剪一次對應一次規約,直到剪到只剩樹根”
規范規約:最左規約,每次對最左簡單短語進行的規約
一個文法的句型,必能通過一次一次的規范推導獲得。同時也能通過一次一次的規范規約規約至開始符號,每次規約都對應一個句柄。所以用規約簡單短語的方法檢查文法是可行的。
規范推導和規范規約互為逆過程:規范推導倒着看就是規范規約
規范句型:由規范推導或規范規約得到的句型
二義性文法——不可判定的
-
文法所定義的某個句子存在兩棵不同的語法樹。
-
文法中存在某個句子,它有兩個不同的規范(最右)推導。
-
文法中存在某個句子,它有兩個不同的規范(最左)規約,即在規約中某些規范句型的句柄不唯一。
注意:
- 如果存在兩種推導,那么不能說明一定是二義性文法,因為兩種推導可能對應同一個語法樹
- 二義性的例子
句型E+E*i存在不同句柄
題型:給一句型,找短語、簡單短語、句柄
-
畫語法樹
-
對於某個句型的語法樹,它的每一顆子樹都能找出一個短語(可能重復),枚舉所有的子樹就能找全。
-
在此基礎上,再找簡單短語和句柄
參考https://www.cnblogs.com/AlvinZH/p/8300162.html