📜  上下文无关语法和上下文无关语言中的歧义

📅  最后修改于: 2022-05-13 01:54:10.439000             🧑  作者: Mango

上下文无关语法和上下文无关语言中的歧义

先决条件 - 下推自动机和上下文无关语言。

假设我们有一个带有产生式规则的上下文无关文法 G:S->aSb|bSa|SS|ℇ

最左推导 (LMD) 和推导树:从起始符号 S 到字符串的最左推导是通过用相应产生式规则的 RHS 替换最左边的非终结符号来完成的。例如:从上面的语法 G 中最左边的字符串abab 的推导是这样完成的:

S => aSb => abSab => abab

使用生产规则替换带下划线的符号。

派生树:它说明如何使用 S 的生产规则派生字符串,如图 1 所示。

上下文无关语法和上下文无关语言中的歧义

图1

最右推导 (RMD):从起始符号 S 对字符串的最右推导是通过用相应产生式规则的 RHS 替换最右边的非终结符号来完成的。例如:从上面的语法 G 中最右边的字符串abab 的推导是这样完成的:

S => SS => SaSb => Sab => aSbab => abab

使用生产规则替换带下划线的符号。使用最右边推导的 abab 推导树如图 2 所示。

上下文无关语法和上下文无关语言中的歧义2

图 2

推导可以是 LMD 或 RMD,也可以是两者,或者都不是。例如:

S => aSb => abSab => abab is LMD as well as RMD

but S => SS => SaSb => Sab => aSbab => abab is RMD but not LMD.

模糊上下文无关语法:如果由语法生成的字符串存在多个 LMD 或多个 RMD,则上下文无关语法称为歧义。歧义语法中的字符串也会有不止一个派生树。上面描述的语法是模棱两可的,因为有两个派生树(图 1 和图 2)。字符串abab 可以有多个 RMD,它们是:

S => SS => SaSb => Sab => aSbab => abab

S => aSb => abSab => abab

歧义上下文无关语言:如果没有明确的语法来定义该语言,则上下文无关语言称为歧义,并且它也称为固有歧义上下文无关语言。

笔记:

  • 如果上下文无关文法 G 有歧义,则文法 L(G) 生成的语言可能有歧义,也可能没有歧义
  • 将模糊 CFG 转换为明确 CFG 并不总是可能的。只有一些不明确的 CFG 可以转换为明确的 CFG。
  • 没有将模糊 CFG 转换为明确 CFG 的算法。
  • 始终存在对应于明确 CFL 的明确 CFG。
  • 确定性 CFL 始终是明确的。

问题:考虑以下关于上下文无关文法的陈述

G = {S->SS, S->ab, S->ba, S->ℇ}

  • I G 模棱两可
  • II G 产生所有具有相同数量的 a 和 b 的字符串
  • III G 可以被确定性 PDA 接受

下面哪个组合表达了关于 G 的所有真实陈述?

  1. 我只是
  2. 仅限 I 和 III
  3. 仅限 II 和 III
  4. 一、二、三

解决方案:字符串abab 有不同的 LMD,可以是

S => SS => SSS => abSS => ababS => abab

S => SS => abS => abab

所以语法是模棱两可的。所以陈述 I 是真的。

语句 II 指出语法 G 生成所有具有相同数量的 a 和 b 的字符串,但它不能生成 aabb 字符串。所以陈述二是不正确的。

陈述 III 也是正确的,因为它可以被确定性 PDA 接受。所以正确的选项是(B)。

问题:下列哪一项陈述是错误的?

  1. 存在上下文无关语言,因此生成它们的所有上下文无关语法都是模棱两可的。
  2. 一个明确的上下文无关文法对于它生成的语言的每个字符串总是有一个唯一的解析树。
  3. 确定性和非确定性下推自动机总是接受相同的语言集。
  4. 来自一个字母表的一组有限字符串始终是一种常规语言。

解决方案: (A)是正确的,因为对于模棱两可的 CFL,与之对应的所有 CFG 都是模棱两可的。

(B) 也是正确的,因为明确的 CFG 对于它生成的每个语言字符串都有一个唯一的解析树。

(C) 是错误的,因为某些语言被非确定性 PDA 接受,但不被确定性 PDA 接受。

(D) 也是正确的,因为有限的字符串集总是规则的。

所以选项(C)是正确的选项。