首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CFG语法定义

CFG语法定义
EN

Stack Overflow用户
提问于 2011-06-25 05:21:36
回答 2查看 427关注 0票数 2

定义生成语言的CFG (上下文无关语言):

L={a^n b^m c^n | n,m>=0}

谁能告诉我如何解决这个问题?

我的理解是L是由这样的元素组成的:{ aabbbcc }(我假设n=2和m=3)

预先感谢约阿希姆

EN

回答 2

Stack Overflow用户

发布于 2011-06-25 05:26:41

这听起来像是家庭作业,所以我只给出一些提示。

如何在上下文无关文法产生式中匹配a和c的数量?

您可以使用什么类型的产生式来生成一个b序列?

如何将这两个子问题合并为一个上下文无关文法?

票数 2
EN

Stack Overflow用户

发布于 2011-06-26 01:30:40

考虑生成语言的上下文无关文法

代码语言:javascript
复制
L1 = {a^nc^n : n >= 0}

比如

代码语言:javascript
复制
G1 = <{S},{a,c},S,{S -> aSc,S-> λ}>

G1中的派生可以描述如下:

代码语言:javascript
复制
G1 =>1 S        (via S)
   =>* a^nSc^n  (via n >= 0 applications of S -> aSc)
   =>1 a^nc^n   (via S -> λ)

语法G1在语言L1中建立ac的数量和位置之间的所需关系,然后以规则S -> λ的应用而终止。

考虑如何通过应用规则S -> λ来终止G1中的派生,以及如何生成m >= 0 b的序列而不是空字符串。

代码语言:javascript
复制
G2 = <V,N,S2,P>

为了在由相等数量的ac包围的L2中生成字符串,可以如下扩充G1的规则以获得语法G1'

代码语言:javascript
复制
G1' = <{S} ∪ V,{a,c} ∪ N,S,{S -> aSc,S -> S2} ∪ {P}>

为了解决您的问题,让L2作为语言{b}*,使用G2作为生成它的常规语法。

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

https://stackoverflow.com/questions/6473890

复制
相关文章

相似问题

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