2012-04-13 34 views
3

在編譯器構造中,主要的含糊問題之一是dangling else。正如在Aho,Lam,Sethi和Ullman編着的「編譯器:原理,技術和工具」一書中提到的那樣,DL(1)解析器不能使用dangling else的語法。LL(1)用於懸掛的其他語法

它是不是可以處理爲LL(1)?

回答

4

它的確如此,LL(k)或LALR(k)不能以純粹的形式進行分析。問題在於有兩種可能的解釋:它是一個模棱兩可的問題(「其他」屬於最近的「如果」,或不屬於)。

它通常是治癒通過堅持只有一個解釋,例如,「其他人屬於最近如果」。

許多解析器生成器可以得到這個「正確無誤」;與LL的解決方案是接受第一個解析的工作,並嘗試「其他附加到最接近」第一。 LR的解決方案是「輕鬆轉移」,這很容易導致,只需在「減少」行動之前檢查「轉移」行爲即可。

它只會成爲一個解析器的問題,它會真正地挑起模糊的分析,比如GLR。這裏可以提供額外的語法提示,例如「換其他」。