編譯原理——自底向上分析


自底向上分析

1.移進-規約分析(自底向上的一般過程,存在缺陷)

准備工作:

一個符號棧、一個待分析的符號串#xxxxx#

要點:

初始狀態

僅將最左側#移進符號棧

之后

每次根據符號棧的情況在兩個操作之間二選一:

  1. 移進
  2. 規約

如果當前符號棧中沒有形成當前句型新的句柄,將符號串的一個字符移進(自左向右依次)

如果當前符號棧中形成了當前句型新的句柄,則規約——彈出句柄並將得到的非終結符入棧

重復這個過程

結束

最終最終符號棧只剩下#和識別符號,則分析成功,否則失敗

注意

  1. 句柄一定位於棧頂。若不在棧頂,該句柄應該在之前就已經被規約才對

  2. 棧內符號串+未處理輸入符號串=當前句型

  3. 上述方法並沒有給出識別句柄的有效算法,取而代之的

    識別句柄的依據是看棧頂符號串是否形成規則的右部

    但這種方法不一定正確。因為不能認為:對句型 xuy 而言,若有U∷ = u,即
    U=>u 就斷定u是簡單短語, u 就是句柄,而是要同時滿足
    Z=*> xUy。

    【導致這種情況的本質原因是,只給一個靜態的句型和文法,嚴格意義上是無法確定短語的,見https://www.cnblogs.com/Ivan-Luo/p/11694447.html。短語的定義是,或者說,有一個規則A::=b,某個句型中恰好有b,但不能保證用A去規約這個b之后得到的仍是該文法的句型。】

    算符優先分析

適用於上下文無關文法


免責聲明!

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



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