自底向上分析
1.移進-規約分析(自底向上的一般過程,存在缺陷)
准備工作:
一個符號棧、一個待分析的符號串#xxxxx#
要點:
初始狀態
僅將最左側#移進符號棧
之后
每次根據符號棧的情況在兩個操作之間二選一:
- 移進
- 規約
如果當前符號棧中沒有形成當前句型新的句柄,將符號串的一個字符移進(自左向右依次)
如果當前符號棧中形成了當前句型新的句柄,則規約——彈出句柄並將得到的非終結符入棧
重復這個過程
結束
最終最終符號棧只剩下#和識別符號,則分析成功,否則失敗
注意
-
句柄一定位於棧頂。若不在棧頂,該句柄應該在之前就已經被規約才對
-
棧內符號串+未處理輸入符號串=當前句型
-
上述方法並沒有給出識別句柄的有效算法,取而代之的
識別句柄的依據是看棧頂符號串是否形成規則的右部,
但這種方法不一定正確。因為不能認為:對句型 xuy 而言,若有U∷ = u,即
U=>u 就斷定u是簡單短語, u 就是句柄,而是要同時滿足
Z=*> xUy。【導致這種情況的本質原因是,只給一個靜態的句型和文法,嚴格意義上是無法確定短語的,見https://www.cnblogs.com/Ivan-Luo/p/11694447.html。短語的定義是,或者說,有一個規則A::=b,某個句型中恰好有b,但不能保證用A去規約這個b之后得到的仍是該文法的句型。】
算符優先分析
適用於上下文無關文法