除了“最接近匹配”之外,还有其他解决“悬而未决”问题的方法吗?


9

以下上下文无关文法呈现出“悬空别的”型歧义(想象代表和代表和代表一些其他类型的指令或块): 例如,可以将解析为或(这是该语法中最简单/最短的歧义词)。b c S一个if expr thenbelseC aacbcaacbcaacbc

小号一个小号b小号|一个小号|C
一个一个CbC一个一个CbC一个一个CbC

解决这种“悬而未决”的歧义的“标准”方式迫使“其他”()语句与最接近/最内的“如果-那么”()配对。这可以通过以下方式完成: 这个语法是明确的。在上面的示例中,它强制执行解析。一个小号b一个aacbc

小号一个Ťb小号|一个小号|CŤ一个ŤbŤ|C
一个一个CbC

问题:是否存在另一种自然方法来解决会导致解析?换句话说,我正在寻找一种语法,该语法生成​​与上述两种语言相同的语言,并且语言明确,并且将解析为。一个一个CbC一个一个CbC一个一个CbC一个一个CbC

备注:我的第一次尝试如下: 可根据需要解决的歧义-但此语法仍然不明确:可以解析为或。 aacbcaacbacbcaac cbacbcaacbacbc

小号一个小号b小号|一个ü|Cü一个ü|C
一个一个CbC一个一个Cb一个CbC一个一个Cb一个CbC一个一个Cb一个CbC

1
在最后一个示例中,您认为这两个可能的解析中的哪一个是“自然的”或正确的,为什么?
rici

@rici是的,这是一个棘手的问题!而且我不知道。我会对产生解析的明确语法感到满意。我主要关心的是一个一个一个...... 一个一个一个ç b ç b ç ... b Ç(有更多的一个的比b的)的匹配ķ个最后bķ一个(和叶最内层,是无与伦比的)。一个一个Cb一个CbC一个一个一个一个一个一个CbCbCbC一个bķbķ一个一个
格罗森

Answers:


7

此问题与省略了一些小括号的表达式中匹配括号的问题完全类似。这里的“如果”(或中代表语法)是一个开放的括号和“其他”(b)是一个右括号。(从ab的序列中,您可以通过在每个b的前面放置一个c,然后在末端的一个末端机械地插入c s 。)因为它更适合我的括号大脑,所以我写的好像是手头的问题。一个b一个bCb

传统的“最接近匹配”悬挂-其他分辨率将每个关闭与最近尚未匹配的打开相匹配。这意味着匹配的开盘价与其匹配的开盘价之间绝不会存在不匹配的开盘价。

一种可能的选择是使每个关闭与最早可行的不匹配打开相匹配。“可行”在这里的意思是,开能不违反插句嵌套匹配(例如,第一个不能切实匹配最后)。

必须从外到外进行此匹配,以便在所有包围对都匹配后才尝试进行闭合匹配。这个事实使得无法使用有界超前算法生成解析,因为解析必须在将字符串拆分为完全匹配的段之后从两端向内进行(因为这些段有效地限制了潜在匹配的范围)。

但是,不存在在线从左到右的解析器这一事实并不意味着没有明确的CFG。(显然:回文语言必须从两端到中间进行解析,但是编写明确的语法很容易)。

为了产生“最匹配”括号问题的语法,我依靠这样一个事实,即不匹配的开放不能跟随匹配的开放。如果是,那么最远匹配属性将不适用,因为不匹配的开盘可能已经匹配了匹配的开盘的收盘,因此不匹配的事实违反了最匹配的属性。

所以这是有点笨拙的语法:

小号ü|中号üŤ|一个übŤ|一个übC|一个中号bü中号一个中号b中号|CŤ一个Ť|一个C

是开始符号;M是完全匹配的语句;U绝对是不匹配的语句(这意味着它们至少包含一个不匹配的 a,因此它们不能为空), T是仅由不匹配 s组成的“尾巴”。关于无与伦比的开放的上述事实可以直接从语法阅读:所有无与伦比打开衍生自牛逼,一个牛逼只能出现在年底 ü,和 ü只能跟着一个牛逼小号中号ü一个Ť一个ŤŤüüŤ

üü小号中号ü小号中号ü中号ü

可能有比我选择的方法更好的解决方法。但这似乎有效,并且可以与我用来测试的Bison的GLR解析器配合使用。除非您编写额外的代码来处理歧义,否则该解析器会抱怨模棱两可的解析,而我实在太懒了。我用最多20个open + closes的字符串进行了测试,它似乎为每个正确嵌套的序列生成了明确的解析,而没有为错误嵌套的序列生成解析。


祝贺实现我的结论可能是不可能的!我通过实验检查了,对于长度≤16的单词,该语法确实是明确的,并且生成的单词与问题中的单词相同。现在,我必须详细了解它是如何工作的!
Gro-Tsen

小号一个小号bŤ|一个中号b小号中号Ť一个Ť|Cü

0

取a + b + c + d + e和abcde。语法可以使用两种显而易见的方法来解析这些语法,但是我们使用了一种方法。

在“悬而未决”的情况下,这实际上并不是人们的看法。而是将语法解释为“ if”,后跟零,一个或多个“ else if”,然后是可选的“ else”。


一个Cb一个Cb一个CbC
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.