自下而上的語法分析:(規約)
由葉節點到根節點,構造樹
規範規約:最左規約(對應於最右推導)
例:
對於文法:
S→aABe
A→Ab|b
B→d
串abbde的規約過程:
對應的最右推導:
S→aABe→aAde→aAbde→abbde
存在的問題:遇到Ab的時候,有兩種可能A→Ab和A→b
解決:
短語的概念:
如果S=> αAw=>αβw,則稱β爲相對於A的、句型αβw 的短語
直接短語
若A→ β爲一產生式,則稱β爲相對於A的、句型αβw 的直接短語
例:
句型aAbde所包含的直接短語:
Ab、d、
句柄:
最左直接短語是句柄
例:句型aAbde所包含的句柄:Ab
素短語
①它首先是一個短語②至少含有一個終結符③除自身外,不再含有其它的素短語
最左素短語LPP ( leftmost Prime Phrase)
算符優先分析過程中歸約的是最左素短語
例:關於文法E→E+T|T
T→T*F|F
F→(E)|id
對於句型F+F*id3
語法樹是:
短語:F1, F2, id3, F2*id3,
F1+F2*id3
直接短語: F1, F2, id3
句柄: F1
最左素短語: id3
用棧實現移進歸約分析
例
關於文法:
E→E+T|T
T→T*F|F
F→(E)|id
對於串 id1*id2+id3 的分析
方法:對於符號棧中的非終結符,能規約就規約,不能規約就從輸入串中移入符號
算符優先分析法:
注:
算術關係“<”,“=”和“>”與優先關係具有十分不同的性質。例如,a<·b並不一定意味着b·>a
例如:+ <·(,但(· >+不一定存在。 具體如:2+(3+5)
算符優先關係矩陣:
關於文法
FIRSTVT和LASTVT集:
FIRSTVT(P)={a|P=>a…或P=>Qa…,
LASTVT(P)={a|P=> … a或P=>…aQ
上面文法的FIRSTVT和LASTVT集:
關於上面文法對於串id+id*id$的分析:
方法:如果<· (表示當前優先級不夠)就移進,如果·> 或者=就規約