首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何构建生成这种语言的语法?上下文无关文法

我如何构建生成这种语言的语法?上下文无关文法
EN

Stack Overflow用户
提问于 2016-06-17 21:55:47
回答 2查看 1.3K关注 0票数 0

我正在学习有限自动机和语法测试,我被这个问题卡住了:

构造一个生成L的文法:l= {a^n b^m c^2n | n>=0,m>=0}

我如何构建生成这种语言的语法?文法上下文无关文法自动机

EN

回答 2

Stack Overflow用户

发布于 2016-06-17 22:18:52

我认为这应该能起到作用。我在http://mdaines.github.io/grammophone/上验证过了。

S -> a B c c|a S c c|。

B -> b B|。

票数 0
EN

Stack Overflow用户

发布于 2016-06-17 22:20:39

我发现,对于这类问题,想出一些规则来从小字符串中构建大字符串总是有帮助的。首先,找出你语言中最小的字符串。在我们的例子中,我们可以从这样的观察开始:如果n= 0,那么b^m在我们的语言中;也就是说,b*中的w在我们的语言中。然后我们注意到,如果x在我们的语言中是一个字符串,我们通过在左侧添加一个a和在右侧添加两个cs来获得另一个字符串;也就是说,axcc在我们的语言中也是一个字符串。所以我们的规则是:

  1. b* in L
  2. if x in L then axcc in L

现在,用CFG编写这段代码很简单:

代码语言:javascript
复制
S -> B
S -> aScc

这里,S生成我们的语言L,B生成语言b*。我们通过提供以符号B开始的b*的语法来完成语法:

代码语言:javascript
复制
(1) S -> B
(2) S -> aScc
(3) B -> e
(4) B -> B

任何字符串a^n b^m c^2n都可以使用规则2的n个应用程序、规则1的1个应用程序、规则4的m个应用程序和规则3的1个应用程序来生成。作为练习,此语法不生成不在语言中的字符串。

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

https://stackoverflow.com/questions/37883466

复制
相关文章

相似问题

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