定义生成语言的CFG(无上下文语言):
L = {a ^ n b ^ m c ^ n | N,M> = 0}
有谁能告诉我如何解决这个问题?
我的理解是L由以下元素组成:{aabbbcc}(我假设n = 2且m = 3)
提前谢谢 勒夫答案 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
中确定c
和L1
的数量和位置之间所需的关系,然后以应用规则S -> λ
。
考虑如何通过应用规则G1
来终止S -> λ
中的派生,以及如何生成m >= 0
b
的序列而不是空字符串。这是一个稍微更一般的问题的解决方案。假设我们有一个由语法生成的语言L2
G2 = <V,N,S2,P>
为了生成L2
中由相同数量的a
和c
包围的字符串,G1
的规则可能会增加如下获得语法G1'
:
G1' = <{S} ∪ V,{a,c} ∪ N,S,{S -> aSc,S -> S2} ∪ {P}>
要解决您的问题,请L2
为语言{b}*
和G2
生成它的常规语法。