并发解析算法

时间:2011-07-23 19:30:52

标签: parsing concurrency

现有的解析器算法(类似于LALR,SLR和LL)是否可以并行解析单个输入而不仅仅是多个输入?

编辑:对不起,我当时并不是在寻找研究论文,更像是“有编译器编译器生成并发解析器”或“这个语言的编译器并行解析” - 现实世界的例子。

2 个答案:

答案 0 :(得分:3)

没有任何众所周知的: - }

很多原因是问题被描述为解析字符串,一次向解析器提供一个标记。这使得问题按照定义顺序排列,呃。

可以想象将令牌数组同时呈现给某个解析器,然后让解析器解析数组中各个点的子串,将子串的兼容树拼接在一起。拼接过程可能很复杂,但如果由L(AL)R [更好的,GLR]解析器驱动,在生成子串的大多数解析树之后从左到右吞下非终结符,则可能是可管理的;认为这是一个“累积器”。

[阴影,快速Google搜索产生1990 Japanese paper on doing parallel GLR with what amounts to parallel Prolog]

你现在遇到了并行神奇地生成令牌数组的问题。现在你需要一个并行的词法分析器: - }

2013年6月编辑:我终于记得McKeeman's 1982 paper on parallel LR parsing

答案 1 :(得分:0)

我正在研究一种确定性的上下文自由解析算法,它具有O(N)工作复杂度,O(log N)时间复杂度,与输入字符串长度成比例的细粒度并行性,以及与a的等效行为。 LR解析器。我很快就会提交给同行评审。

主要思想是独立处理输入流中的每个字符,假设它可以匹配任何规则,然后拼凑相邻的字符组,直到它们明确地匹配单个规则。匹配规则后,算法会过滤掉规则。在匹配所有规则之后,将令牌收集到一个序列中。

使用可能部分嵌套的通配符处理令牌涉及一些复杂性,并且需要后处理步骤来处理这些并保持最坏情况的O(log N)复杂性。实践中可能不需要这一步。

相关问题