来自语言问题的上下文无关语法

Context-Free Grammar from language question

我在尝试为以下语言制定上下文无关语法时遇到了一些问题:

L = { a^x b^y : y>=x, y-x is odd }

目前我有以下内容,但并不完全有效

S -> aSb | Sb |epsilon

我如何处理这种语言的 y-x is odd 方面?这是我不确定该怎么做的一件事。

从语法开始:

S -> aSb | Sb |epsilon

这将生成 y >= x 的 a^x b^y。这非常接近,但是,正如您所指出的,未通过 "y - x is odd" 测试。

我们该如何解决这个问题?那么,如果 y >= x 且 y - x 是奇数,则 y = x + z,其中 z 是某个正奇数。这是什么意思?意思是

  1. 您的第一个产品 S -> aSb 非常好:我们需要一种方法来添加任意多个 a 并保持 b 的数量相同。

  2. 你的第二部作品S -> bS有一个大问题:这允许你添加任意数量的b,但你必须添加奇数个b。

  3. 你的第三个产品S -> epsilon有一个大问题:这让你不能再添加任何 b,但零不是奇数。

为了解决这个问题,我们可以为b的奇数长度字符串的语言想出一个文法,并替换产生式S -> aSb的RHS中的S。这将保证为您提供这两个条件。 b 的奇数长度字符串的语法:

B -> b | bbB

结合自己的语法,改掉不好的作品:

S -> aSb | B
B -> b | bbB

应该可以了。