2012-12-08 90 views
8

我目前正在學習有關編譯器和我在LR理解(0)有,我們有「移位/減少」或「降低/減少」衝突的情況下,但它是不可能有「移位/轉移」的衝突!爲什麼我們不能有「轉變/轉變」衝突?當解析器不能告訴是否轉移(推下一個輸入令牌解析棧的頂上)或減少(從解析棧中彈出一個系列終端和非終結點的)爲什麼編譯器不能有「移位/移位」衝突?

+2

有減少減少衝突,因爲它們是可以選擇減少處理的2個產品。 由於您可以通過一些生產轉移和減少,所以存在轉換減少衝突,並且顯然仍然需要進行解析。 移動只是意味着1件事,你提前輸入流,所以不能有移位衝突。 – axiom

回答

18

移位/減少衝突發生。減少/減少衝突是當解析器知道要減少時,但不知道要執行哪種減少。

如果你有移進/移衝突,解析器會知道,它需要THR下一個標記推到它的解析堆棧,但不知道如何做到這一點。由於只有一種方法可以將令牌推送到解析堆棧中,所以通常不會有任何此形式的衝突。

也就是說,如果您有一個奇怪的設置,其中存在兩個或更多個從給定解析狀態導出並用相同終端符號標記的轉換,理論上可能存在移位/移位衝突。在這種情況下,衝突將是是轉移到一個國家還是轉移到另一個國家。如果您嘗試將自動機壓縮到更少的狀態並且執行不正確,或者您嘗試構建非確定性分析自動機,則可能會發生這種情況。在實踐中,這絕不會發生。

希望這會有所幫助!

+0

第三段非常有用,謝謝! – alcuadrado