定点组合器如何使递归构造终止?

thw*_*hwd 7 compiler-construction recursion parsing haskell combinators

定点组合器为匿名函数提供了一种引用自身或构建相互递归结构的方法.尽管在lambda演算中有用,但它们在现代编程语言中基本上是多余的,因为大多数(如果不是全部)支持递归,lambdas和闭包.

此外,定点组合器可以使递归构造像左递归语法分析器终止.考虑Lickman 1995,他证明了他的实现终止但从未真正提到它是如何工作的(它只是从格理论到haskell实现的逐步推导)以及为什么他需要一种已经支持递归的语言中的定点组合器本身.

它是如何工作的,为什么他需要一个定点组合器?

yat*_*975 4

通过快速浏览,Lickman 在 5.3 的末尾写道:“正如上面所定义的,fixS 确保在所有连续输入上都具有足够的生产力。”

关键是让不动点运算符产生足够的输出,以便解析可以继续。fix :: (a -> a) -> a对于一般的但专门a针对Set a或稍后的,您不能这样做Parser a,给出了足够的结构(即格子的结构)来使用。

再说一遍,我只是粗略地浏览了这篇论文,但我认为“h :: Parser a -> Parser a维持生产力的属性==>fixP h是富有成效的”这一陈述的证明(在第 5.5 节中)是关键。