Parsing 单项式解析——它是什么?

Parsing 单项式解析——它是什么?,parsing,haskell,monoids,Parsing,Haskell,Monoids,我刚刚偶然发现了Monoid解析这个术语,它来自于作者的一篇名为“Monoids简介”的文章。本幻灯片始终使用haskell 现在当我搜索这个词的时候,我只找到了很少的提及,而且大部分都是来自同一个作者。所以我认为这个术语可以在这里解释 那么,单倍体解析是有趣的新事物吗?除了我链接的幻灯片外,它是否出现在其他任何地方?最重要的是它是什么?幻灯片本身似乎没有给出定义,也没有强调太多。试试他的另一个演示文稿,它是你正在阅读的第二个演示文稿。这是一个新的东西,我所能做的就是解释他的幻灯片,告诉你这是一

我刚刚偶然发现了Monoid解析这个术语,它来自于作者的一篇名为“Monoids简介”的文章。本幻灯片始终使用haskell

现在当我搜索这个词的时候,我只找到了很少的提及,而且大部分都是来自同一个作者。所以我认为这个术语可以在这里解释


那么,单倍体解析是有趣的新事物吗?除了我链接的幻灯片外,它是否出现在其他任何地方?最重要的是它是什么?幻灯片本身似乎没有给出定义,也没有强调太多。

试试他的另一个演示文稿,它是你正在阅读的第二个演示文稿。这是一个新的东西,我所能做的就是解释他的幻灯片,告诉你这是一种尝试,采用一元语法分析(比如Parsec),并使用较弱的代数结构,以便有更多的空间重新构造计算。这个想法是为了提高并行性


编辑:页面上的评论表明,这两次会谈是背靠背安排的,因此您看到的幻灯片上提到的内容可能是第二次会谈的前奏

我将从解析器通常的工作方式开始。一般来说,解析器按顺序获取输入标记。在某个时刻(通常在所有令牌耗尽之后),解析器返回输出。该模型的一个缺点是它本身是顺序的:因为解析器按顺序操作一系列令牌,所以不清楚如何并行化该过程

然而,如果我们能够访问能够将部分解析结果组合成单个结果的操作,那么解析可以并行化。例如,如果我们的语言可以用上下文无关语法表示,那么我们可以分别并行地解析每个顶级定义,然后使用组合操作组装这些片段

Monoidal解析仅仅意味着解析器可以访问合适的组合函数。幺半群是一种具有零元素和二元结合算子的结构。例如,列表形成一个幺半群,其中零为空列表,关联运算符为串联。记住,关联性意味着
(a++b++c==a++(b++c)
。碰巧,这是确保我们能够以合理的方式重新组合解析结果所必需的属性。子解析重新组合的确切顺序并不重要,只要每个子解析保持在正确的序列位置

当然,对于实际编写并行解析器来说,也有必要适当地分割块。如果您想并行解析顶级定义,就必须能够识别该定义的起始位置。此任务通常由解析器本身执行。我记得,他的大部分幻灯片都涉及这一主题。顶级定义上的拆分是相当粗粒度的;理想情况下,我们的解析器将能够从任意标记开始,然后在应用幺半群运算符时从片段中获得意义


不幸的是,我不能说“幺半解析”是否是新的,因为我对文献不是特别熟悉。然而,我怀疑任何用于并行解析的模型或算法都涉及幺半群结构,即使它没有显式命名。众所周知,幺半群适合于并行化问题,因此,如果这种技术在解析器研究人员中很普遍,我也不会感到惊讶。

Edward提到了sigfpe的一些帖子,认为这很有趣:当时影响人们的另一件事是Guy Steele关于并行apt数据结构的一些讲座。这篇文章可能要晚一点,但它的特点是:我相信Fokker在1995年首次描述了幺半群解析器组合器。我发现一篇关于这个主题的论文很有趣,它是“幺半群机器:正则语言的O(logn)解析器”。