2011-04-10 96 views
0

我無法理解YACC的轉換/減少衝突問題。有人可以解決這個問題,並使用dangling-else例子向我解釋這個問題嗎?轉換減少衝突

謝謝!

回答

1

懸掛其他問題的基本含義是這樣的:

if (x) then if (y) then a; else b; 

可被分析爲要麼

if (x) then { 
    if (y) { 
     then a; 
     else b; 
    } 
} 

if (x) then { 
    if (y) 
     then a; 
} 
else b; 

大多數語言要求第一個 - 和這正是yacc所做的,所以它很少是一個真正的問題(事實上,yacc的S/R衝突很少是m關心的問題)。

+0

無論他們是否擔心,只有在瞭解它是什麼以及它爲什麼出現在語法中的特定位置後才能說出。 LadyMadonne234試圖理解它真的很好。 – Ingo 2011-04-10 20:55:19

+0

@Ingo:哦,對此我沒有任何爭論。我只是注意到(例如)決定試圖從語法中擺脫所有的S/R衝突,這是很不值得的。 – 2011-04-10 20:57:57

+0

謝謝,這很清楚問題是什麼。但是,你能否解釋下面顯示的改進語法如何解決問題? 'full_if:something | IF expression THEN full_if ELSE full_if ; open_if:IF expression THEN語句 | IF表達式然後full_if ELSE open_if ;' 所以在堆棧中,如果你有一個語句,如「如果A然後如果B然後C否則D」 - 對我來說,它仍然看起來像你有同樣的問題......即,如果你在「如果A然後如果B然後C」並且你看到一個Else到來,你仍然可以使用open_if規則的第一部分減少對嗎? – LadyMadonna234 2011-04-10 21:08:16