CFG语法定义

时间:2011-06-24 21:21:36

标签: compiler-construction context-free-grammar formal-languages

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

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

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

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

提前谢谢 勒夫

2 个答案:

答案 0 :(得分:2)

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

如何在无上下文的语法制作中创建a和c的匹配数?

你可以使用什么样的产品来产生一系列b?

如何将这两个子问题组合成一个无上下文的语法?

答案 1 :(得分:0)

考虑生成语言

的无上下文语法
L1 = {a^nc^n : n >= 0}

,例如

G1 = <{S},{a,c},S,{S -> aSc,S-> λ}>

G1中的派生可以表征如下:

G1 =>1 S        (via S)
   =>* a^nSc^n  (via n >= 0 applications of S -> aSc)
   =>1 a^nc^n   (via S -> λ)

语法G1在语言a中确定cL1的数量和位置之间所需的关系,然后以应用规则S -> λ

考虑如何通过应用规则G1来终止S -> λ中的派生,以及如何生成m >= 0 b的序列而不是空字符串。这是一个稍微更一般的问题的解决方案。假设我们有一个由语法生成的语言L2

G2 = <V,N,S2,P>

为了生成L2中由相同数量的ac包围的字符串,G1的规则可能会增加如下获得语法G1'

G1' = <{S} ∪ V,{a,c} ∪ N,S,{S -> aSc,S -> S2} ∪ {P}>

要解决您的问题,请L2为语言{b}*G2生成它的常规语法。