首页
学习
活动
专区
圈层
工具
发布

建设CFG
EN

Stack Overflow用户
提问于 2011-04-26 13:19:49
回答 3查看 680关注 0票数 0

如何为语言x^a ^b^ z^2(a+b)构造无上下文语法,其中a>=0,b>=0。谢谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-26 13:27:41

你可以这样想

代码语言:javascript
复制
x^a y^b z^2(a+b) = x^a y^b z^2a z^2b = x^a y^b (z^2)^b (z^2)^a 

因此

代码语言:javascript
复制
S -> xSzz | S1
S1 -> yS1zz | e
票数 3
EN

Stack Overflow用户

发布于 2011-04-26 13:29:34

请注意,对于每个x和每个y,由于2(a + b)的缘故,您需要生成两个z。此外,请注意,每个字符串都可以被看作是yz的“内部”部分,以及xz的“外部”部分。

由于每个y都需要两个z,所以内部部分可以用(使用大写表示非终端符号和空字符串的[] )来描述:

代码语言:javascript
复制
I --> []
I --> y I z z

现在,用同样的方式为外部部分编写语法,但在基本情况下引用I

票数 2
EN

Stack Overflow用户

发布于 2011-04-26 13:28:04

从本质上讲,有两种情况你需要治疗:

  • 您可以在字符串的开头添加一个x,在这种情况下,您需要在字符串的末尾添加两个z
  • 或者在中间添加一个y,在这种情况下,还需要在末尾添加两个z

尝试将这些描述中的任何一种简化为您知道解决方案的更简单的语法(例如a^n b^n)。

这个提示应该足以推断出生成语法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5790964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档