给出
L1 = {w belongs to {a,b}* | has as many a as b}
定义CFG G,使得L(G)= L1
在我看来,这些作品应该是正确的答案
1) S → aSa
2) S → bSb
3) S → ε
我的理由是:
L1包含{ab,aabb,aaabbb,... etc}等字符串
现在我有一个疑问:如果我应用上述作品,简而言之:
S → aSa
我应用1)所以我得到S → aSa → aaSaa
我选择2)得到S → aSa → aaSaa → aabSbaa
然后使用空字符串我得到最后一个字符串S → aSa → aaSaa → aabSbaa → aabbaa
现在,也许我错了,但在字符串aabbaa
中,a的数量不等于b的数量
任何帮助都将受到高度赞赏
勒夫
答案 0 :(得分:1)
这是一个标准的练习,但还没有正确的答案。
1) S -> aSb
2) S -> bSa
3) S -> SS
4) S -> ε
任意数量的a和b,包括空字符串。
<小时/> 有很多在线课堂笔记的答案和证据。例子: here,here,here和here以显示一些内容。
答案 1 :(得分:0)
假设L1实际上是{a^nb^n | n ≥ 0}
,你提供的语法不能(正如你自己证明的那样)产生精确的L1。为了满足松散表达的要求,“单词左侧a
的数量必须等于右侧b
的数量”,您的目标是找到一个语法,在每个产品的每个产品之后强制执行该要求。
另一种思考方式是:不允许您在语法中使用不会产生相同数量a
和b
的作品。
编辑:由于这不是作业,我会继续给出答案:
V = {A}, Σ = {a, b}, S = A, and R the set of rules:
(1) A -> aAbA | bAaA
(2) A -> ε
答案 2 :(得分:-1)
抱歉也许我错了,但Michael Foukarakis的解决方案不起作用
基本上这两条规则不提供具有相同数量的a和b的字符串。
(1) A -> aAb
(2) A -> ε
拿A - &gt; aAb然后应用1)规则,你有A -> aAb ->aaAb
然后???
如果你申请2),你最终得到A -> aAb ->aaAb ->aab
我认为正确的答案是:
1)S->aSbS
2)S->bSaS
3) S->ε
即使我收到如下字符:abab
或aababb
实际上他们都满足了最初的要求,即:
the string must contain the same number of a and b.
(元素的排列方式无关紧要。)
评论当然受到欢迎和鼓励。