在编译器构造中,主要的模糊问题之一是悬空其他。 正如Aho,Lam,Sethi和Ullman编写的“编译器:原理,技术和工具”中所提到的,悬挂其他的语法不能与LL(1)解析器一起使用。
它是否真的无法处理为LL(1)?
答案 0 :(得分:4)
它是真的,它不能被LL(k)或LALR(k)以纯粹的形式解析。问题在于悬挂其他物有两种可能的解释;它是一个歧义问题(“else”属于最近的“if”,或者不属于)。
通常只通过坚持两种解释中的一种来解决,例如,“else属于最接近的if”。
许多解析器生成器可以“偶然”获得此功能; LL的解决方案是接受第一个有效的解析,并首先尝试“另外附加到最近”。 LR的解决方案是“转向其他”,这很容易引起,只需在“减少”操作之前检查“转移”动作。
它只会成为一个解析器的问题,它会真正选择模糊的解析,例如GLR。这里可以提供额外的语法提示,例如“转移到其他地方”。