假設我有以下上下文無關文法,在那個特定的順序(YACC):LR分析器降低/減少(YACC等)
- Ž→X
- Ž→ZX
如果我有一個輸入:
(Z(ZX
將解析器減少:
- 'X' 到 'Z'
- 'Z X' 到 'Z'
我想到的是它的2號,但我不明白爲什麼。非常感謝
編輯:改變輸入澄清
假設我有以下上下文無關文法,在那個特定的順序(YACC):LR分析器降低/減少(YACC等)
如果我有一個輸入:
(Z(ZX
將解析器減少:
我想到的是它的2號,但我不明白爲什麼。非常感謝
編輯:改變輸入澄清
你的語法是向左結合的,因爲它是左遞歸。左聯合意味着當輸入從左到右掃描時,產品將會貪婪地完成。你總是有一個z
,它通過掃描另一個x
並減少,延長到更長的z
。
關於你的問題,你不能有一個輸入z z x
,因爲輸入由終端符號組成。據推測,x
是一個終端符號(否則語法不完整)。 z
顯然是非終結符。
你可以考慮部分句子形式z z x
。然而,這種形式不能由這個語法產生。
從z
開始,您的下一步是生成x
(並因此完成)或生成z x
。接下來可能的步驟是用以下兩種方法之一替換z
:生成x x
(並完成)或生成z x x
。
正如您所見,這些規則無法訪問字符串z z x
。
如果你有'z z x'的輸入,你的解析器會反對z是一個未知符號(因爲它是一個規則,而不是一個標記)。 – 2012-03-21 21:46:10