有一种方法可以使用DFA和输入字词的运行时构造的Levenshtein自动机来执行模糊解析(即使输入错误也可以接受字符串)。可以用Earley解析器完成类似的事情吗?我发现很难理解算法,更不用说回答这个问题了。
有一种方法可以使用DFA和输入字词的运行时构造的Levenshtein自动机来执行模糊解析(即使输入错误也可以接受字符串)。可以用Earley解析器完成类似的事情吗?我发现很难理解算法,更不用说回答这个问题了。
Answers:
答案是肯定的。但是,我不会使用Earley解析器执行此操作,因为有一些具有相同功能的简单解析器。
基本上,Earley解析器属于一个通用的上下文无关解析器家族,当语法不明确时,该解析器为给定的字符串生成所有可能的解析。
有两种(至少)了解这些解析器的方式:
作为与输入字符串语法相对应的下推自动机的动态编程解释;
作为语法与有限状态自动机相交的构造。
解析单个字符串时,要考虑的有限状态自动机是线性自动机,它仅识别 要解析的字符串,一次识别一个符号(状态数为| w | + 1)。如果应用FA的跨产品建设一个和CF garmmar g ^(酒吧希勒尔,玻璃市,沙米尔1961年),你会得到一个新的CF文法这是一个新的语法˚F产生大号(一)∩。通常被忽略的有趣之处在于, F保留了 G使用的解析树。,直到非终端重命名(由于交叉产品)。
因此,如果FA 仅生成您的输入字符串,则语法F 将仅生成该字符串(如果它位于L(G )中,否则将生成空语言∅)。此外,它使用G可以用来生成它的所有解析树来生成它。
该语法通常称为共享解析林,所有常规CF解析算法或多或少是跨产品构造的优化版本,无论是CYK,Earley,广义LR还是LL或其他。所以我所说的也适用于他们。
但是,正如您所看到的,如果有人对此感兴趣,则可以推广到解析整个常规集。
那正是你的问题。你有一个字符串。要分析它由一个有限状态转换器定义了一些变化,而你的情况是,产生一些给定范围内的所有字符串的换能器的Levenshtein编辑距离的 w ^(但换能器的起源是不重要的)。这些字符串的集合是可以由FA定义的常规集合,其加权转换可以计算每个字符串的编辑距离。
如果使用语法进行叉积,则会得到共享的解析森林语法F,该语法生成交点中的所有字符串。此外,您将获得某些规则的权重,以便可以计算每个接受的字符串的编辑距离。
如果需要,可以将其用于仅使弦保持最小距离。
但是,由于与有限状态机的组合是关联的,因此可以稍微改善一下。
容易修剪该构造以获得与以前相同的结果,但是最好的方法是控制交叉点的构造,例如包括Earley在内的文献中大多数解析器使用的动态编程组织,并使用它来避免生成通过计算距离并在超出期望阈值时中止任何计算路径来制定无用规则。动态编程还可以用于直接计算到输入的距离最短的字符串的解析森林(或解析树)。