編輯(或實際上重寫):您要求澄清的句子是一個主要的毛球!我需要對語言和自動機進行一點複習,以便自己挑選那個毛球。我發現these lecture notes在這方面非常有用。
它也不會讓它變得更容易,這些術語是以自頂向下擴展的形式定義的,而最右邊的派生通常用於自下而上的解析!
我將使用下面的表達式文法來說明:
expr -> expr + term | term
term -> term * factor | factor
factor -> NUMBER | (expr)
- 甲右句型是句型其可以通過最右推導到達,這是描述重複的另一種方式自上而下只擴展最右端的非終結符號。這是一個最右推導,並在它的所有形式,因此右句型:一個句型的
expr -> expr + term
-> expr + term * factor
-> expr + term * NUMBER
-> expr + factor * NUMBER
-> expr + NUMBER * NUMBER
-> expr + term + NUMBER * NUMBER
-> expr + NUMBER + NUMBER * NUMBER
-> term + NUMBER + NUMBER * NUMBER
-> NUMBER + NUMBER + NUMBER * NUMBER
甲前綴(無論是右或以其它方式)被輸入的序列將符號縮減爲零或更多的該句子形式的前導符號。空序列是每個句子形式的前綴,構成句式的符號的完整序列也是它的前綴。
A 簡單的短語是一個單一的非終結符號的擴展,它在句子形式中佔有一席之地。例如,term * factor
是一個簡單的短語,因爲它是term
的擴展,並且term
本身發生在三個作品中。
句子形式的句柄是該形式中最左邊的簡單短語。 (我承認,我覺得'句柄'這個詞在這裏有點混淆。)在最右邊的推導中,句柄很容易識別 - 這是由最近擴展的非終結符引起的符號序列。如果您正在使用shift-reduce解析器的方式進行自下而上的操作,那麼句柄就是這個簡單的短語,需要減少下一個。(從下往上,看着這些符號均減少,閱讀推導表格上面看到我的意思。)
一個活前綴右句型的是不超出一個前綴表單的句柄 - 換句話說,前綴是有效的,並且不包含可縮減的簡單短語,如果所述前綴延伸到句柄的末尾,則可能除了句柄本身。
從一個移位歸約解析器的角度來看,只要你有在堆棧上可行的前綴,你還沒有被迫要麼減少對堆棧的頂部(可能不完全)簡單的短語到一個新的非終結符,或者如果它不能被減少,就無法解析。如果移動下一個符號會導致除可行前綴之外的其他內容,那麼您必須在此時減少或失敗。
如果你解析上下文無關語言,還有一個比較方便的特性,隨着表驅動移位歸約解析器建設幫助:設定一個上下文無關語言的所有可行的前綴是本身是一種常用語言!因此,您可以構建一個識別可行前綴的常規語言的有限自動機,並使用它來確定何時移位以及何時減少。堆棧和有限狀態機的組合本質上是一個下推自動機,它正是需要識別上下文無關語言的自動機類。
這只是顯示專家(書籍作者)如何使學習體驗如此複雜。他們似乎認爲簡潔的語言是可以理解的語言。 – Domi 2014-02-26 18:07:14