Context free grammar 语言L={a^(n)b^(m)c^(k):m=|i-k}的上下文无关语法
我有这种语言Context free grammar 语言L={a^(n)b^(m)c^(k):m=|i-k}的上下文无关语法,context-free-grammar,regular-language,formal-languages,context-free-language,Context Free Grammar,Regular Language,Formal Languages,Context Free Language,我有这种语言L={a^nb^mc^k:m=|n-k} 我知道m=|n-k可以用两种方式表达 1) m=n-k表示n>=k或n=m+k 2) m=k-n表示k>=n或k=m+n 因此,我得到了两种语言, L1={a^nb^mc^k:n=m+k} L2={a^nb^mc^k:k=m+n} 然后我声称L是两者的并集,L=l1u-L2 我不太明白如何生成一个语法,其中一个终端的一个指数是其他两个终端的总和。i、 e,在L1中,您有n=m+k 此外,L1可以进一步简化为 a^n=>a^(m+k)=>a
L={a^nb^mc^k:m=|n-k}
我知道
m=|n-k
可以用两种方式表达
1) m=n-k表示n>=k或n=m+k
2) m=k-n表示k>=n或k=m+n
因此,我得到了两种语言,
L1={a^nb^mc^k:n=m+k}
L2={a^nb^mc^k:k=m+n}
然后我声称
L
是两者的并集,L=l1u-L2
我不太明白如何生成一个语法,其中一个终端的一个指数是其他两个终端的总和。i、 e,在L1
中,您有n=m+k
此外,
L1
可以进一步简化为a^n=>a^(m+k)=>a^(m)a^(k)
L1={a^ma^kb^mc^k:m,k>=0}
试图回答
L1={a^ma^kb^mc^k:m,k>=0}
语法G1
S->A|B
A->aAb|lambda
对于L1,您可以使用
S -> aSc
S -> T
T -> aTb
T ->
与L2类似。
a^n b^n
:
以CFG为例:
S ::= aSb | <empty string>
同样,由于每一个产品都保留了我们想要的属性(即c
s的数量是a
s的数量加上b
s的数量),它将适用于我们在语法中生成的任何句子
你可以运用类似的推理来找出语法,从而保留你在作品中提到的其他数学属性。我理解
S:=aSc
和T:=bTc
部分,但是你能解释一下你第一部作品中的S->T
是什么吗.|
是显示S
可能的不同右侧的简写。语法等价于:S:=aSc;S::=T;S::=;T::=bTc;T::=
其中S
是起始符号,T
只是语法中的另一个非终结符号,就像原始帖子中的A
和B
。我们需要另一个非终结符的原因是确保在添加所有b
s之前添加所有a
s;如果我们只使用S
,我们最终会生成像bacc
这样的字符串,因此,非终端T
用于将S
和T
连接在一起。我想你可以这么说。我投票结束这个问题,因为它与计算机编程无关。有没有办法将它移到另一个站点?可能在CS堆栈交换或数学中。
S ::= aSc | T | <empty string>
T ::= bTc | <empty string>