来自语言问题的上下文无关语法
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 是某个正奇数。这是什么意思?意思是
您的第一个产品 S -> aSb
非常好:我们需要一种方法来添加任意多个 a 并保持 b 的数量相同。
你的第二部作品S -> bS
有一个大问题:这允许你添加任意数量的b,但你必须添加奇数个b。
你的第三个产品S -> epsilon
有一个大问题:这让你不能再添加任何 b,但零不是奇数。
为了解决这个问题,我们可以为b的奇数长度字符串的语言想出一个文法,并替换产生式S -> aSb
的RHS中的S
。这将保证为您提供这两个条件。 b 的奇数长度字符串的语法:
B -> b | bbB
结合自己的语法,改掉不好的作品:
S -> aSb | B
B -> b | bbB
应该可以了。
我在尝试为以下语言制定上下文无关语法时遇到了一些问题:
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 是某个正奇数。这是什么意思?意思是
您的第一个产品
S -> aSb
非常好:我们需要一种方法来添加任意多个 a 并保持 b 的数量相同。你的第二部作品
S -> bS
有一个大问题:这允许你添加任意数量的b,但你必须添加奇数个b。你的第三个产品
S -> epsilon
有一个大问题:这让你不能再添加任何 b,但零不是奇数。
为了解决这个问题,我们可以为b的奇数长度字符串的语言想出一个文法,并替换产生式S -> aSb
的RHS中的S
。这将保证为您提供这两个条件。 b 的奇数长度字符串的语法:
B -> b | bbB
结合自己的语法,改掉不好的作品:
S -> aSb | B
B -> b | bbB
应该可以了。